| // MIR for `main` 0 nll |
| |
| | Free Region Mapping |
| | '?0 | Global | ['?0, '?1] |
| | '?1 | Local | ['?1] |
| | |
| | Inferred Region Values |
| | '?0 | U0 | {bb0[0..=8], bb1[0..=7], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=5], bb7[0], '?0, '?1} |
| | '?1 | U0 | {bb0[0..=8], bb1[0..=7], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=5], bb7[0], '?1} |
| | '?2 | U0 | {bb1[0..=7], bb2[0..=2]} |
| | '?3 | U0 | {bb1[1..=7], bb2[0..=2]} |
| | '?4 | U0 | {bb1[4..=7], bb2[0..=2]} |
| | |
| | Inference Constraints |
| | '?0 live at {bb0[0..=8], bb1[0..=7], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=5], bb7[0]} |
| | '?1 live at {bb0[0..=8], bb1[0..=7], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=5], bb7[0]} |
| | '?2 live at {bb1[0]} |
| | '?3 live at {bb1[1..=3]} |
| | '?4 live at {bb1[4..=7], bb2[0..=2]} |
| | '?2: '?3 due to Assignment at Single(bb1[0]) ($DIR/region_subtyping_basic.rs:19:13: 19:18 (#0) |
| | '?3: '?4 due to Assignment at Single(bb1[3]) ($DIR/region_subtyping_basic.rs:20:13: 20:14 (#0) |
| | |
| fn main() -> () { |
| let mut _0: (); |
| let mut _1: [usize; ValTree(Leaf(0x0000000000000003): usize)]; |
| let _3: usize; |
| let mut _4: usize; |
| let mut _5: bool; |
| let mut _7: bool; |
| let _8: bool; |
| let mut _9: usize; |
| let _10: bool; |
| scope 1 { |
| debug v => _1; |
| let _2: &'?3 usize; |
| scope 2 { |
| debug p => _2; |
| let _6: &'?4 usize; |
| scope 3 { |
| debug q => _6; |
| } |
| } |
| } |
| |
| bb0: { |
| StorageLive(_1); |
| _1 = [const ConstValue(Scalar(0x0000000000000001): usize), const ConstValue(Scalar(0x0000000000000002): usize), const ConstValue(Scalar(0x0000000000000003): usize)]; |
| FakeRead(ForLet(None), _1); |
| StorageLive(_2); |
| StorageLive(_3); |
| _3 = const ConstValue(Scalar(0x0000000000000000): usize); |
| _4 = Len(_1); |
| _5 = Lt(_3, _4); |
| assert(move _5, "index out of bounds: the length is {} but the index is {}", move _4, _3) -> [success: bb1, unwind: bb7]; |
| } |
| |
| bb1: { |
| _2 = &'?2 _1[_3]; |
| FakeRead(ForLet(None), _2); |
| StorageLive(_6); |
| _6 = _2; |
| FakeRead(ForLet(None), _6); |
| StorageLive(_7); |
| _7 = const ConstValue(Scalar(0x01): bool); |
| switchInt(move _7) -> [0: bb4, otherwise: bb2]; |
| } |
| |
| bb2: { |
| StorageLive(_8); |
| StorageLive(_9); |
| _9 = (*_6); |
| _8 = ConstValue(ZeroSized: fn(usize) -> bool {use_x})(move _9) -> [return: bb3, unwind: bb7]; |
| } |
| |
| bb3: { |
| StorageDead(_9); |
| StorageDead(_8); |
| _0 = const ConstValue(ZeroSized: ()); |
| goto -> bb6; |
| } |
| |
| bb4: { |
| StorageLive(_10); |
| _10 = ConstValue(ZeroSized: fn(usize) -> bool {use_x})(const ConstValue(Scalar(0x0000000000000016): usize)) -> [return: bb5, unwind: bb7]; |
| } |
| |
| bb5: { |
| StorageDead(_10); |
| _0 = const ConstValue(ZeroSized: ()); |
| goto -> bb6; |
| } |
| |
| bb6: { |
| StorageDead(_7); |
| StorageDead(_6); |
| StorageDead(_3); |
| StorageDead(_2); |
| StorageDead(_1); |
| return; |
| } |
| |
| bb7 (cleanup): { |
| resume; |
| } |
| } |