| // 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..=8], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=4], bb7[0], '?0, '?1} |
| | '?1 | U0 | {bb0[0..=8], bb1[0..=8], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=4], bb7[0], '?1} |
| | '?2 | U0 | {bb1[0..=8], bb2[0..=2]} |
| | '?3 | U0 | {bb1[1..=8], bb2[0..=2]} |
| | '?4 | U0 | {bb1[5..=8], bb2[0..=2]} |
| | |
| | Inference Constraints |
| | '?0 live at {bb0[0..=8], bb1[0..=8], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=4], bb7[0]} |
| | '?1 live at {bb0[0..=8], bb1[0..=8], bb2[0..=3], bb3[0..=3], bb4[0..=1], bb5[0..=2], bb6[0..=4], bb7[0]} |
| | '?2 live at {bb1[0]} |
| | '?3 live at {bb1[1..=4]} |
| | '?4 live at {bb1[5..=8], 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[4]) ($DIR/region_subtyping_basic.rs:20:13: 20:14 (#0) |
| | |
| | Borrows |
| | bw0: issued at bb1[0] in '?2 |
| | |
| fn main() -> () { |
| let mut _0: (); |
| let mut _1: [usize; ValTree(Leaf(0x00000003): usize)]; |
| let _3: usize; |
| let mut _4: bool; |
| let mut _6: bool; |
| let _7: bool; |
| let mut _8: usize; |
| let _9: bool; |
| scope 1 { |
| debug v => _1; |
| let _2: &'?3 usize; |
| scope 2 { |
| debug p => _2; |
| let _5: &'?4 usize; |
| scope 3 { |
| debug q => _5; |
| } |
| } |
| } |
| |
| bb0: { |
| StorageLive(_1); |
| _1 = [const ConstValue(Scalar(0x00000001): usize), const ConstValue(Scalar(0x00000002): usize), const ConstValue(Scalar(0x00000003): usize)]; |
| FakeRead(ForLet(None), _1); |
| StorageLive(_2); |
| StorageLive(_3); |
| _3 = const ConstValue(Scalar(0x00000000): usize); |
| FakeRead(ForIndex, _1); |
| _4 = Lt(copy _3, const ValTree(Leaf(0x00000003): usize)); |
| assert(move _4, "index out of bounds: the length is {} but the index is {}", const ValTree(Leaf(0x00000003): usize), copy _3) -> [success: bb1, unwind: bb7]; |
| } |
| |
| bb1: { |
| _2 = &'?2 _1[_3]; |
| FakeRead(ForLet(None), _2); |
| StorageDead(_3); |
| StorageLive(_5); |
| _5 = copy _2; |
| FakeRead(ForLet(None), _5); |
| StorageLive(_6); |
| _6 = const ConstValue(Scalar(0x01): bool); |
| switchInt(move _6) -> [0: bb4, otherwise: bb2]; |
| } |
| |
| bb2: { |
| StorageLive(_7); |
| StorageLive(_8); |
| _8 = copy (*_5); |
| _7 = ConstValue(ZeroSized: fn(usize) -> bool {use_x})(move _8) -> [return: bb3, unwind: bb7]; |
| } |
| |
| bb3: { |
| StorageDead(_8); |
| StorageDead(_7); |
| _0 = const ConstValue(ZeroSized: ()); |
| goto -> bb6; |
| } |
| |
| bb4: { |
| StorageLive(_9); |
| _9 = ConstValue(ZeroSized: fn(usize) -> bool {use_x})(const ConstValue(Scalar(0x00000016): usize)) -> [return: bb5, unwind: bb7]; |
| } |
| |
| bb5: { |
| StorageDead(_9); |
| _0 = const ConstValue(ZeroSized: ()); |
| goto -> bb6; |
| } |
| |
| bb6: { |
| StorageDead(_6); |
| StorageDead(_5); |
| StorageDead(_2); |
| StorageDead(_1); |
| return; |
| } |
| |
| bb7 (cleanup): { |
| resume; |
| } |
| } |