File: slice_iter.range_loop.PreCodegen.after.panic-abort.mir

package info (click to toggle)
rustc-web 1.78.0%2Bdfsg1-2~deb11u3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,245,360 kB
  • sloc: xml: 147,985; javascript: 18,022; sh: 11,083; python: 10,265; ansic: 6,172; cpp: 5,023; asm: 4,390; makefile: 4,269
file content (132 lines) | stat: -rw-r--r-- 3,648 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// MIR for `range_loop` after PreCodegen

fn range_loop(_1: &[T], _2: impl Fn(usize, &T)) -> () {
    debug slice => _1;
    debug f => _2;
    let mut _0: ();
    let mut _3: usize;
    let mut _4: std::ops::Range<usize>;
    let mut _5: std::ops::Range<usize>;
    let mut _6: &mut std::ops::Range<usize>;
    let mut _14: std::option::Option<usize>;
    let mut _16: usize;
    let mut _17: bool;
    let mut _19: &impl Fn(usize, &T);
    let mut _20: (usize, &T);
    let _21: ();
    scope 1 {
        debug iter => _5;
        let _15: usize;
        scope 2 {
            debug i => _15;
            let _18: &T;
            scope 3 {
                debug x => _18;
            }
        }
        scope 5 (inlined iter::range::<impl Iterator for std::ops::Range<usize>>::next) {
            debug self => _6;
            scope 6 (inlined <std::ops::Range<usize> as iter::range::RangeIteratorImpl>::spec_next) {
                debug self => _6;
                let mut _7: &usize;
                let mut _8: &usize;
                let mut _11: bool;
                let _12: usize;
                let mut _13: usize;
                scope 7 {
                    debug old => _12;
                    scope 8 {
                    }
                }
                scope 9 (inlined std::cmp::impls::<impl PartialOrd for usize>::lt) {
                    debug self => _7;
                    debug other => _8;
                    let mut _9: usize;
                    let mut _10: usize;
                }
            }
        }
    }
    scope 4 (inlined <std::ops::Range<usize> as IntoIterator>::into_iter) {
        debug self => _4;
    }

    bb0: {
        StorageLive(_3);
        _3 = Len((*_1));
        _4 = std::ops::Range::<usize> { start: const 0_usize, end: move _3 };
        StorageDead(_3);
        StorageLive(_5);
        _5 = _4;
        goto -> bb1;
    }

    bb1: {
        StorageLive(_14);
        _6 = &mut _5;
        StorageLive(_12);
        StorageLive(_11);
        StorageLive(_7);
        _7 = &(_5.0: usize);
        StorageLive(_8);
        _8 = &(_5.1: usize);
        StorageLive(_9);
        _9 = (_5.0: usize);
        StorageLive(_10);
        _10 = (_5.1: usize);
        _11 = Lt(move _9, move _10);
        StorageDead(_10);
        StorageDead(_9);
        switchInt(move _11) -> [0: bb2, otherwise: bb4];
    }

    bb2: {
        StorageDead(_8);
        StorageDead(_7);
        StorageDead(_11);
        StorageDead(_12);
        StorageDead(_14);
        StorageDead(_5);
        drop(_2) -> [return: bb3, unwind unreachable];
    }

    bb3: {
        return;
    }

    bb4: {
        StorageDead(_8);
        StorageDead(_7);
        _12 = (_5.0: usize);
        StorageLive(_13);
        _13 = <usize as Step>::forward_unchecked(_12, const 1_usize) -> [return: bb5, unwind unreachable];
    }

    bb5: {
        (_5.0: usize) = move _13;
        StorageDead(_13);
        _14 = Option::<usize>::Some(_12);
        StorageDead(_11);
        StorageDead(_12);
        _15 = ((_14 as Some).0: usize);
        _16 = Len((*_1));
        _17 = Lt(_15, _16);
        assert(move _17, "index out of bounds: the length is {} but the index is {}", move _16, _15) -> [success: bb6, unwind unreachable];
    }

    bb6: {
        _18 = &(*_1)[_15];
        StorageLive(_19);
        _19 = &_2;
        StorageLive(_20);
        _20 = (_15, _18);
        _21 = <impl Fn(usize, &T) as Fn<(usize, &T)>>::call(move _19, move _20) -> [return: bb7, unwind unreachable];
    }

    bb7: {
        StorageDead(_20);
        StorageDead(_19);
        StorageDead(_14);
        goto -> bb1;
    }
}