- // MIR for `call` before Inline + // MIR for `call` after Inline fn call(_1: Box>, _2: I) -> () { debug mock => _1; debug input => _2; let mut _0: (); let mut _3: &mut std::boxed::Box>; let mut _4: I; + scope 1 (inlined > as FnMut>::call_mut) { + let mut _5: &mut dyn std::ops::FnMut; + let mut _6: std::boxed::Box>; + let mut _7: *const dyn std::ops::FnMut; + } bb0: { StorageLive(_3); _3 = &mut _1; StorageLive(_4); _4 = move _2; - _0 = > as FnMut>::call_mut(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::FnMut (Transmute); + _5 = &mut (*_7); + _0 = as FnMut>::call_mut(move _5, move _4) -> [return: bb4, unwind: bb2]; } bb1: { - StorageDead(_4); - StorageDead(_3); - 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); + drop(_1) -> [return: bb1, unwind: bb3]; } }