- // MIR for `bar` before Inline + // MIR for `bar` after Inline fn bar(_1: P) -> () { debug _baz => _1; let mut _0: (); let _2: (); let mut _3: &fn() {foo}; let _4: fn() {foo}; let mut _5: (); + scope 1 (inlined >::call - shim(fn() {foo})) { + } bb0: { StorageLive(_2); StorageLive(_3); StorageLive(_4); - _4 = hide_foo() -> [return: bb1, unwind: bb4]; + _4 = hide_foo() -> [return: bb1, unwind: bb3]; } bb1: { _3 = &_4; StorageLive(_5); _5 = (); - _2 = >::call(move _3, move _5) -> [return: bb2, unwind: bb4]; + _2 = move (*_3)() -> [return: bb5, unwind: bb3]; } bb2: { - StorageDead(_5); - StorageDead(_3); - StorageDead(_4); - StorageDead(_2); - _0 = const (); - drop(_1) -> [return: bb3, unwind: bb5]; + return; } - bb3: { - return; + bb3 (cleanup): { + drop(_1) -> [return: bb4, unwind terminate]; } bb4 (cleanup): { - drop(_1) -> [return: bb5, unwind terminate]; + resume; } - bb5 (cleanup): { - resume; + bb5: { + StorageDead(_5); + StorageDead(_3); + StorageDead(_4); + StorageDead(_2); + _0 = const (); + drop(_1) -> [return: bb2, unwind: bb4]; } }