| - // MIR for `h` before Inline |
| + // MIR for `h` after Inline |
| |
| fn h() -> () { |
| let mut _0: (); |
| let _1: (!, !); |
| + let mut _2: fn() -> ! {sleep}; |
| + scope 1 (inlined call_twice::<!, fn() -> ! {sleep}>) { |
| + debug f => _2; |
| + let mut _3: &fn() -> ! {sleep}; |
| + let _4: !; |
| + let mut _5: &fn() -> ! {sleep}; |
| + let mut _7: !; |
| + scope 2 { |
| + debug a => _4; |
| + let _6: !; |
| + scope 3 { |
| + debug b => _6; |
| + } |
| + } |
| + } |
| |
| bb0: { |
| StorageLive(_1); |
| - _1 = call_twice::<!, fn() -> ! {sleep}>(sleep) -> unwind continue; |
| + StorageLive(_2); |
| + _2 = sleep; |
| + StorageLive(_6); |
| + StorageLive(_4); |
| + StorageLive(_3); |
| + _3 = &_2; |
| + _4 = <fn() -> ! {sleep} as Fn<()>>::call(move _3, const ()) -> [return: bb1, unwind: bb5]; |
| + } |
| + |
| + bb1: { |
| + StorageDead(_3); |
| + StorageLive(_5); |
| + _5 = &_2; |
| + _6 = <fn() -> ! {sleep} as Fn<()>>::call(move _5, const ()) -> [return: bb2, unwind: bb4]; |
| + } |
| + |
| + bb2: { |
| + StorageDead(_5); |
| + StorageLive(_7); |
| + _7 = move _4; |
| + _1 = (move _7, move _6); |
| + StorageDead(_7); |
| + StorageDead(_4); |
| + drop(_2) -> [return: bb3, unwind continue]; |
| + } |
| + |
| + bb3: { |
| + unreachable; |
| + } |
| + |
| + bb4 (cleanup): { |
| + drop(_4) -> [return: bb5, unwind terminate(cleanup)]; |
| + } |
| + |
| + bb5 (cleanup): { |
| + drop(_2) -> [return: bb6, unwind terminate(cleanup)]; |
| + } |
| + |
| + bb6 (cleanup): { |
| + resume; |
| } |
| } |
| |