// MIR for `main` after SimplifyCfg-elaborate-drops fn main() -> () { let mut _0: (); // return place in scope 0 at $DIR/retag.rs:29:11: 29:11 let mut _1: i32; // in scope 0 at $DIR/retag.rs:30:9: 30:14 let _2: (); // in scope 0 at $DIR/retag.rs:31:5: 37:6 let mut _4: &Test; // in scope 0 at $DIR/retag.rs:32:17: 32:36 let _5: Test; // in scope 0 at $DIR/retag.rs:32:17: 32:24 let mut _6: &mut i32; // in scope 0 at $DIR/retag.rs:32:29: 32:35 let mut _7: &mut i32; // in scope 0 at $DIR/retag.rs:32:29: 32:35 let mut _9: &mut i32; // in scope 0 at $DIR/retag.rs:33:19: 33:20 let mut _12: *mut i32; // in scope 0 at $DIR/retag.rs:36:18: 36:29 let mut _14: [closure@main::{closure#0}]; // in scope 0 at $DIR/retag.rs:40:31: 43:6 let mut _16: for<'r> fn(&'r i32) -> &'r i32; // in scope 0 at $DIR/retag.rs:44:14: 44:15 let mut _17: &i32; // in scope 0 at $DIR/retag.rs:44:16: 44:18 let _18: &i32; // in scope 0 at $DIR/retag.rs:44:16: 44:18 let _19: &i32; // in scope 0 at $DIR/retag.rs:47:5: 47:24 let mut _20: &Test; // in scope 0 at $DIR/retag.rs:47:5: 47:24 let _21: Test; // in scope 0 at $DIR/retag.rs:47:5: 47:12 let mut _22: &i32; // in scope 0 at $DIR/retag.rs:47:21: 47:23 let _23: &i32; // in scope 0 at $DIR/retag.rs:47:21: 47:23 let _24: i32; // in scope 0 at $DIR/retag.rs:47:22: 47:23 let mut _26: *const i32; // in scope 0 at $DIR/retag.rs:50:14: 50:28 let _27: (); // in scope 0 at $DIR/retag.rs:52:5: 52:18 scope 1 { debug x => _1; // in scope 1 at $DIR/retag.rs:30:9: 30:14 let _3: &mut i32; // in scope 1 at $DIR/retag.rs:32:13: 32:14 let _13: for<'r> fn(&'r i32) -> &'r i32; // in scope 1 at $DIR/retag.rs:40:9: 40:10 scope 2 { debug v => _3; // in scope 2 at $DIR/retag.rs:32:13: 32:14 let _8: &mut i32; // in scope 2 at $DIR/retag.rs:33:13: 33:14 scope 3 { debug w => _8; // in scope 3 at $DIR/retag.rs:33:13: 33:14 let _10: &mut i32; // in scope 3 at $DIR/retag.rs:34:13: 34:14 scope 4 { debug w => _10; // in scope 4 at $DIR/retag.rs:34:13: 34:14 let _11: *mut i32; // in scope 4 at $DIR/retag.rs:36:13: 36:15 scope 5 { debug _w => _11; // in scope 5 at $DIR/retag.rs:36:13: 36:15 } } } } scope 6 { debug c => _13; // in scope 6 at $DIR/retag.rs:40:9: 40:10 let _15: &i32; // in scope 6 at $DIR/retag.rs:44:9: 44:11 scope 7 { debug _w => _15; // in scope 7 at $DIR/retag.rs:44:9: 44:11 let _25: *const i32; // in scope 7 at $DIR/retag.rs:50:9: 50:11 let mut _28: &i32; // in scope 7 at $DIR/retag.rs:47:21: 47:23 scope 8 { debug _w => _25; // in scope 8 at $DIR/retag.rs:50:9: 50:11 } } } } bb0: { StorageLive(_1); // scope 0 at $DIR/retag.rs:30:9: 30:14 _1 = const 0_i32; // scope 0 at $DIR/retag.rs:30:17: 30:18 StorageLive(_2); // scope 1 at $DIR/retag.rs:31:5: 37:6 StorageLive(_3); // scope 1 at $DIR/retag.rs:32:13: 32:14 StorageLive(_4); // scope 1 at $DIR/retag.rs:32:17: 32:36 StorageLive(_5); // scope 1 at $DIR/retag.rs:32:17: 32:24 _5 = Test(const 0_i32); // scope 1 at $DIR/retag.rs:32:17: 32:24 _4 = &_5; // scope 1 at $DIR/retag.rs:32:17: 32:36 Retag(_4); // scope 1 at $DIR/retag.rs:32:17: 32:36 StorageLive(_6); // scope 1 at $DIR/retag.rs:32:29: 32:35 StorageLive(_7); // scope 1 at $DIR/retag.rs:32:29: 32:35 _7 = &mut _1; // scope 1 at $DIR/retag.rs:32:29: 32:35 Retag(_7); // scope 1 at $DIR/retag.rs:32:29: 32:35 _6 = &mut (*_7); // scope 1 at $DIR/retag.rs:32:29: 32:35 Retag([2phase] _6); // scope 1 at $DIR/retag.rs:32:29: 32:35 _3 = Test::foo(move _4, move _6) -> [return: bb1, unwind: bb8]; // scope 1 at $DIR/retag.rs:32:17: 32:36 // mir::Constant // + span: $DIR/retag.rs:32:25: 32:28 // + literal: Const { ty: for<'r, 'x> fn(&'r Test, &'x mut i32) -> &'x mut i32 {Test::foo}, val: Value(Scalar()) } } bb1: { Retag(_3); // scope 1 at $DIR/retag.rs:32:17: 32:36 StorageDead(_6); // scope 1 at $DIR/retag.rs:32:35: 32:36 StorageDead(_4); // scope 1 at $DIR/retag.rs:32:35: 32:36 StorageDead(_7); // scope 1 at $DIR/retag.rs:32:36: 32:37 drop(_5) -> [return: bb2, unwind: bb9]; // scope 1 at $DIR/retag.rs:32:36: 32:37 } bb2: { StorageDead(_5); // scope 1 at $DIR/retag.rs:32:36: 32:37 StorageLive(_8); // scope 2 at $DIR/retag.rs:33:13: 33:14 StorageLive(_9); // scope 2 at $DIR/retag.rs:33:19: 33:20 _9 = move _3; // scope 2 at $DIR/retag.rs:33:19: 33:20 Retag(_9); // scope 2 at $DIR/retag.rs:33:19: 33:20 _8 = &mut (*_9); // scope 2 at $DIR/retag.rs:33:19: 33:20 Retag(_8); // scope 2 at $DIR/retag.rs:33:19: 33:20 StorageDead(_9); // scope 2 at $DIR/retag.rs:33:22: 33:23 StorageLive(_10); // scope 3 at $DIR/retag.rs:34:13: 34:14 _10 = move _8; // scope 3 at $DIR/retag.rs:34:17: 34:18 Retag(_10); // scope 3 at $DIR/retag.rs:34:17: 34:18 StorageLive(_11); // scope 4 at $DIR/retag.rs:36:13: 36:15 StorageLive(_12); // scope 4 at $DIR/retag.rs:36:18: 36:29 _12 = &raw mut (*_10); // scope 4 at $DIR/retag.rs:36:18: 36:19 Retag([raw] _12); // scope 4 at $DIR/retag.rs:36:18: 36:19 _11 = _12; // scope 4 at $DIR/retag.rs:36:18: 36:29 StorageDead(_12); // scope 4 at $DIR/retag.rs:36:29: 36:30 _2 = const (); // scope 1 at $DIR/retag.rs:31:5: 37:6 StorageDead(_11); // scope 4 at $DIR/retag.rs:37:5: 37:6 StorageDead(_10); // scope 3 at $DIR/retag.rs:37:5: 37:6 StorageDead(_8); // scope 2 at $DIR/retag.rs:37:5: 37:6 StorageDead(_3); // scope 1 at $DIR/retag.rs:37:5: 37:6 StorageDead(_2); // scope 1 at $DIR/retag.rs:37:5: 37:6 StorageLive(_13); // scope 1 at $DIR/retag.rs:40:9: 40:10 StorageLive(_14); // scope 1 at $DIR/retag.rs:40:31: 43:6 _14 = [closure@main::{closure#0}]; // scope 1 at $DIR/retag.rs:40:31: 43:6 // closure // + def_id: DefId(0:14 ~ retag[4622]::main::{closure#0}) // + substs: [ // i8, // for<'r> extern "rust-call" fn((&'r i32,)) -> &'r i32, // (), // ] Retag(_14); // scope 1 at $DIR/retag.rs:40:31: 43:6 _13 = move _14 as for<'r> fn(&'r i32) -> &'r i32 (Pointer(ClosureFnPointer(Normal))); // scope 1 at $DIR/retag.rs:40:31: 43:6 StorageDead(_14); // scope 1 at $DIR/retag.rs:43:5: 43:6 StorageLive(_15); // scope 6 at $DIR/retag.rs:44:9: 44:11 StorageLive(_16); // scope 6 at $DIR/retag.rs:44:14: 44:15 _16 = _13; // scope 6 at $DIR/retag.rs:44:14: 44:15 StorageLive(_17); // scope 6 at $DIR/retag.rs:44:16: 44:18 StorageLive(_18); // scope 6 at $DIR/retag.rs:44:16: 44:18 _18 = &_1; // scope 6 at $DIR/retag.rs:44:16: 44:18 Retag(_18); // scope 6 at $DIR/retag.rs:44:16: 44:18 _17 = &(*_18); // scope 6 at $DIR/retag.rs:44:16: 44:18 Retag(_17); // scope 6 at $DIR/retag.rs:44:16: 44:18 _15 = move _16(move _17) -> bb3; // scope 6 at $DIR/retag.rs:44:14: 44:19 } bb3: { Retag(_15); // scope 6 at $DIR/retag.rs:44:14: 44:19 StorageDead(_17); // scope 6 at $DIR/retag.rs:44:18: 44:19 StorageDead(_16); // scope 6 at $DIR/retag.rs:44:18: 44:19 StorageDead(_18); // scope 6 at $DIR/retag.rs:44:19: 44:20 StorageLive(_19); // scope 7 at $DIR/retag.rs:47:5: 47:24 StorageLive(_20); // scope 7 at $DIR/retag.rs:47:5: 47:24 StorageLive(_21); // scope 7 at $DIR/retag.rs:47:5: 47:12 _21 = Test(const 0_i32); // scope 7 at $DIR/retag.rs:47:5: 47:12 _20 = &_21; // scope 7 at $DIR/retag.rs:47:5: 47:24 Retag(_20); // scope 7 at $DIR/retag.rs:47:5: 47:24 StorageLive(_22); // scope 7 at $DIR/retag.rs:47:21: 47:23 StorageLive(_23); // scope 7 at $DIR/retag.rs:47:21: 47:23 _28 = const main::promoted[0]; // scope 7 at $DIR/retag.rs:47:21: 47:23 // mir::Constant // + span: $DIR/retag.rs:47:21: 47:23 // + literal: Const { ty: &i32, val: Unevaluated(main, [], Some(promoted[0])) } Retag(_28); // scope 7 at $DIR/retag.rs:47:21: 47:23 _23 = &(*_28); // scope 7 at $DIR/retag.rs:47:21: 47:23 Retag(_23); // scope 7 at $DIR/retag.rs:47:21: 47:23 _22 = &(*_23); // scope 7 at $DIR/retag.rs:47:21: 47:23 Retag(_22); // scope 7 at $DIR/retag.rs:47:21: 47:23 _19 = Test::foo_shr(move _20, move _22) -> [return: bb4, unwind: bb7]; // scope 7 at $DIR/retag.rs:47:5: 47:24 // mir::Constant // + span: $DIR/retag.rs:47:13: 47:20 // + literal: Const { ty: for<'r, 'x> fn(&'r Test, &'x i32) -> &'x i32 {Test::foo_shr}, val: Value(Scalar()) } } bb4: { Retag(_19); // scope 7 at $DIR/retag.rs:47:5: 47:24 StorageDead(_22); // scope 7 at $DIR/retag.rs:47:23: 47:24 StorageDead(_20); // scope 7 at $DIR/retag.rs:47:23: 47:24 StorageDead(_23); // scope 7 at $DIR/retag.rs:47:24: 47:25 drop(_21) -> [return: bb5, unwind: bb9]; // scope 7 at $DIR/retag.rs:47:24: 47:25 } bb5: { StorageDead(_21); // scope 7 at $DIR/retag.rs:47:24: 47:25 StorageDead(_19); // scope 7 at $DIR/retag.rs:47:24: 47:25 StorageLive(_25); // scope 7 at $DIR/retag.rs:50:9: 50:11 StorageLive(_26); // scope 7 at $DIR/retag.rs:50:14: 50:28 _26 = &raw const (*_15); // scope 7 at $DIR/retag.rs:50:14: 50:16 Retag([raw] _26); // scope 7 at $DIR/retag.rs:50:14: 50:16 _25 = _26; // scope 7 at $DIR/retag.rs:50:14: 50:28 StorageDead(_26); // scope 7 at $DIR/retag.rs:50:28: 50:29 StorageLive(_27); // scope 8 at $DIR/retag.rs:52:5: 52:18 _27 = array_casts() -> bb6; // scope 8 at $DIR/retag.rs:52:5: 52:18 // mir::Constant // + span: $DIR/retag.rs:52:5: 52:16 // + literal: Const { ty: fn() {array_casts}, val: Value(Scalar()) } } bb6: { StorageDead(_27); // scope 8 at $DIR/retag.rs:52:18: 52:19 _0 = const (); // scope 0 at $DIR/retag.rs:29:11: 53:2 StorageDead(_25); // scope 7 at $DIR/retag.rs:53:1: 53:2 StorageDead(_15); // scope 6 at $DIR/retag.rs:53:1: 53:2 StorageDead(_13); // scope 1 at $DIR/retag.rs:53:1: 53:2 StorageDead(_1); // scope 0 at $DIR/retag.rs:53:1: 53:2 return; // scope 0 at $DIR/retag.rs:53:2: 53:2 } bb7 (cleanup): { drop(_21) -> bb9; // scope 7 at $DIR/retag.rs:47:24: 47:25 } bb8 (cleanup): { drop(_5) -> bb9; // scope 1 at $DIR/retag.rs:32:36: 32:37 } bb9 (cleanup): { resume; // scope 0 at $DIR/retag.rs:29:1: 53:2 } }