- // MIR for `call` before Inline + // MIR for `call` after Inline fn call(_1: Box) -> () { debug x => _1; let mut _0: (); let _2: (); let mut _3: &std::boxed::Box; let mut _4: (i32,); + scope 1 (inlined as Fn<(i32,)>>::call) { + let mut _5: &dyn std::ops::Fn(i32); + let mut _6: std::boxed::Box; + let mut _7: *const dyn std::ops::Fn(i32); + } bb0: { StorageLive(_2); StorageLive(_3); _3 = &_1; StorageLive(_4); _4 = (const 1_i32,); - _2 = as Fn<(i32,)>>::call(move _3, move _4) -> [return: bb1, unwind: bb3]; + StorageLive(_6); + StorageLive(_7); + StorageLive(_5); + _6 = copy (*_3); + _7 = copy ((_6.0: std::ptr::Unique).0: std::ptr::NonNull) as *const dyn std::ops::Fn(i32) (Transmute); + _5 = &(*_7); + _2 = >::call(move _5, move _4) -> [return: bb4, unwind: bb2]; } bb1: { - StorageDead(_4); - StorageDead(_3); - StorageDead(_2); - _0 = const (); - drop(_1) -> [return: bb2, unwind: bb4]; + return; } - bb2: { - return; + bb2 (cleanup): { + drop(_1) -> [return: bb3, unwind terminate(cleanup)]; } bb3 (cleanup): { - drop(_1) -> [return: bb4, unwind terminate(cleanup)]; + resume; } - bb4 (cleanup): { - resume; + bb4: { + StorageDead(_5); + StorageDead(_7); + StorageDead(_6); + StorageDead(_4); + StorageDead(_3); + StorageDead(_2); + _0 = const (); + drop(_1) -> [return: bb1, unwind: bb3]; } }