- // 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:: ! {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:: ! {sleep}>(sleep) -> unwind continue; + StorageLive(_2); + _2 = sleep; + StorageLive(_6); + StorageLive(_4); + StorageLive(_3); + _3 = &_2; + _4 = ! {sleep} as Fn<()>>::call(move _3, const ()) -> [return: bb1, unwind: bb5]; + } + + bb1: { + StorageDead(_3); + StorageLive(_5); + _5 = &_2; + _6 = ! {sleep} as Fn<()>>::call(move _5, const ()) -> [return: bb2, unwind: bb4]; + } + + bb2: { + StorageDead(_5); + StorageLive(_7); + _7 = move _4; + _1 = (move _7, copy _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; } }