// MIR for `test` before ElaborateDrops fn test() -> Option> { let mut _0: std::option::Option>; // return place in scope 0 at $DIR/issue_62289.rs:+0:14: +0:30 let mut _1: std::boxed::Box; // in scope 0 at $DIR/issue_62289.rs:+1:10: +1:21 let mut _2: usize; // in scope 0 at $DIR/issue_62289.rs:+1:10: +1:21 let mut _3: usize; // in scope 0 at $DIR/issue_62289.rs:+1:10: +1:21 let mut _4: *mut u8; // in scope 0 at $DIR/issue_62289.rs:+1:10: +1:21 let mut _5: std::boxed::Box; // in scope 0 at $DIR/issue_62289.rs:+1:10: +1:21 let mut _6: std::ops::ControlFlow, u32>; // in scope 0 at $DIR/issue_62289.rs:+1:15: +1:20 let mut _7: std::option::Option; // in scope 0 at $DIR/issue_62289.rs:+1:15: +1:19 let mut _8: isize; // in scope 0 at $DIR/issue_62289.rs:+1:19: +1:20 let _9: std::option::Option; // in scope 0 at $DIR/issue_62289.rs:+1:19: +1:20 let mut _10: !; // in scope 0 at $DIR/issue_62289.rs:+1:19: +1:20 let mut _11: std::option::Option; // in scope 0 at $DIR/issue_62289.rs:+1:19: +1:20 let _12: u32; // in scope 0 at $DIR/issue_62289.rs:+1:15: +1:20 scope 1 { } scope 2 { debug residual => _9; // in scope 2 at $DIR/issue_62289.rs:+1:19: +1:20 scope 3 { } } scope 4 { debug val => _12; // in scope 4 at $DIR/issue_62289.rs:+1:15: +1:20 scope 5 { } } bb0: { StorageLive(_1); // scope 0 at $DIR/issue_62289.rs:+1:10: +1:21 _2 = SizeOf(u32); // scope 1 at $DIR/issue_62289.rs:+1:10: +1:21 _3 = AlignOf(u32); // scope 1 at $DIR/issue_62289.rs:+1:10: +1:21 _4 = alloc::alloc::exchange_malloc(move _2, move _3) -> bb1; // scope 1 at $DIR/issue_62289.rs:+1:10: +1:21 // mir::Constant // + span: $DIR/issue_62289.rs:9:10: 9:21 // + literal: Const { ty: unsafe fn(usize, usize) -> *mut u8 {alloc::alloc::exchange_malloc}, val: Value() } } bb1: { StorageLive(_5); // scope 0 at $DIR/issue_62289.rs:+1:10: +1:21 _5 = ShallowInitBox(move _4, u32); // scope 0 at $DIR/issue_62289.rs:+1:10: +1:21 StorageLive(_6); // scope 0 at $DIR/issue_62289.rs:+1:15: +1:20 StorageLive(_7); // scope 0 at $DIR/issue_62289.rs:+1:15: +1:19 _7 = Option::::None; // scope 0 at $DIR/issue_62289.rs:+1:15: +1:19 _6 = as Try>::branch(move _7) -> [return: bb2, unwind: bb12]; // scope 0 at $DIR/issue_62289.rs:+1:15: +1:20 // mir::Constant // + span: $DIR/issue_62289.rs:9:15: 9:20 // + literal: Const { ty: fn(Option) -> ControlFlow< as Try>::Residual, as Try>::Output> { as Try>::branch}, val: Value() } } bb2: { StorageDead(_7); // scope 0 at $DIR/issue_62289.rs:+1:19: +1:20 _8 = discriminant(_6); // scope 0 at $DIR/issue_62289.rs:+1:15: +1:20 switchInt(move _8) -> [0: bb3, 1: bb5, otherwise: bb4]; // scope 0 at $DIR/issue_62289.rs:+1:15: +1:20 } bb3: { StorageLive(_12); // scope 0 at $DIR/issue_62289.rs:+1:15: +1:20 _12 = ((_6 as Continue).0: u32); // scope 0 at $DIR/issue_62289.rs:+1:15: +1:20 (*_5) = _12; // scope 5 at $DIR/issue_62289.rs:+1:15: +1:20 StorageDead(_12); // scope 0 at $DIR/issue_62289.rs:+1:19: +1:20 _1 = move _5; // scope 0 at $DIR/issue_62289.rs:+1:10: +1:21 drop(_5) -> [return: bb7, unwind: bb11]; // scope 0 at $DIR/issue_62289.rs:+1:20: +1:21 } bb4: { unreachable; // scope 0 at $DIR/issue_62289.rs:+1:15: +1:20 } bb5: { StorageLive(_9); // scope 0 at $DIR/issue_62289.rs:+1:19: +1:20 _9 = ((_6 as Break).0: std::option::Option); // scope 0 at $DIR/issue_62289.rs:+1:19: +1:20 StorageLive(_11); // scope 3 at $DIR/issue_62289.rs:+1:19: +1:20 _11 = _9; // scope 3 at $DIR/issue_62289.rs:+1:19: +1:20 _0 = > as FromResidual>>::from_residual(move _11) -> [return: bb6, unwind: bb12]; // scope 3 at $DIR/issue_62289.rs:+1:15: +1:20 // mir::Constant // + span: $DIR/issue_62289.rs:9:19: 9:20 // + literal: Const { ty: fn(Option) -> Option> {> as FromResidual>>::from_residual}, val: Value() } } bb6: { StorageDead(_11); // scope 3 at $DIR/issue_62289.rs:+1:19: +1:20 StorageDead(_9); // scope 0 at $DIR/issue_62289.rs:+1:19: +1:20 drop(_5) -> bb9; // scope 0 at $DIR/issue_62289.rs:+1:20: +1:21 } bb7: { StorageDead(_5); // scope 0 at $DIR/issue_62289.rs:+1:20: +1:21 _0 = Option::>::Some(move _1); // scope 0 at $DIR/issue_62289.rs:+1:5: +1:22 drop(_1) -> bb8; // scope 0 at $DIR/issue_62289.rs:+1:21: +1:22 } bb8: { StorageDead(_1); // scope 0 at $DIR/issue_62289.rs:+1:21: +1:22 StorageDead(_6); // scope 0 at $DIR/issue_62289.rs:+2:1: +2:2 goto -> bb10; // scope 0 at $DIR/issue_62289.rs:+2:2: +2:2 } bb9: { StorageDead(_5); // scope 0 at $DIR/issue_62289.rs:+1:20: +1:21 StorageDead(_1); // scope 0 at $DIR/issue_62289.rs:+1:21: +1:22 StorageDead(_6); // scope 0 at $DIR/issue_62289.rs:+2:1: +2:2 goto -> bb10; // scope 0 at $DIR/issue_62289.rs:+2:2: +2:2 } bb10: { return; // scope 0 at $DIR/issue_62289.rs:+2:2: +2:2 } bb11 (cleanup): { drop(_1) -> bb13; // scope 0 at $DIR/issue_62289.rs:+1:21: +1:22 } bb12 (cleanup): { drop(_5) -> bb13; // scope 0 at $DIR/issue_62289.rs:+1:20: +1:21 } bb13 (cleanup): { resume; // scope 0 at $DIR/issue_62289.rs:+0:1: +2:2 } }