- // MIR for `foo` before ScalarReplacementOfAggregates + // MIR for `foo` after ScalarReplacementOfAggregates fn foo() -> () { let mut _0: (); let _1: Foo; let mut _2: std::result::Result, ::Err>; let mut _3: std::boxed::Box; let mut _4: std::boxed::Box; let mut _7: isize; let _9: (); let _10: (); let mut _11: std::fmt::Arguments<'_>; let mut _12: &[&str; 3]; let _13: &[&str; 3]; let _14: [&str; 3]; let mut _15: &[core::fmt::rt::Argument<'_>; 2]; let _16: &[core::fmt::rt::Argument<'_>; 2]; let _17: [core::fmt::rt::Argument<'_>; 2]; let mut _18: core::fmt::rt::Argument<'_>; let mut _19: &std::boxed::Box; let _20: &std::boxed::Box; let mut _21: core::fmt::rt::Argument<'_>; let mut _22: &u32; let _23: &u32; let mut _25: bool; let mut _26: isize; let mut _27: isize; let mut _28: isize; + let _29: std::result::Result, ::Err>; + let _30: u32; scope 1 { - debug foo => _1; + debug ((foo: Foo).0: std::result::Result, ::Err>) => _29; + debug ((foo: Foo).1: u32) => _30; let _5: std::result::Result, ::Err>; scope 2 { debug x => _5; let _6: u32; scope 3 { debug y => _6; scope 4 { debug x => _8; let _8: std::boxed::Box; let mut _24: &[&str; 3]; } } } } bb0: { _25 = const false; - StorageLive(_1); + StorageLive(_29); + StorageLive(_30); + nop; StorageLive(_2); StorageLive(_3); StorageLive(_4); _4 = Box::::new(const 5_u32) -> [return: bb1, unwind unreachable]; } bb1: { _3 = move _4 as std::boxed::Box (PointerCoercion(Unsize, Implicit)); StorageDead(_4); _2 = Result::, ::Err>::Ok(move _3); StorageDead(_3); - _1 = Foo:: { x: move _2, y: const 7_u32 }; + _29 = move _2; + _30 = const 7_u32; + nop; StorageDead(_2); StorageLive(_5); _25 = const true; - _5 = move (_1.0: std::result::Result, ::Err>); + _5 = move _29; StorageLive(_6); - _6 = copy (_1.1: u32); + _6 = copy _30; _7 = discriminant(_5); switchInt(move _7) -> [0: bb2, otherwise: bb7]; } bb2: { StorageLive(_8); _25 = const false; _8 = move ((_5 as Ok).0: std::boxed::Box); StorageLive(_9); StorageLive(_10); StorageLive(_11); StorageLive(_12); StorageLive(_13); _24 = const foo::::promoted[0]; _13 = &(*_24); _12 = &(*_13); StorageLive(_15); StorageLive(_16); StorageLive(_17); StorageLive(_18); StorageLive(_19); StorageLive(_20); _20 = &_8; _19 = &(*_20); _18 = core::fmt::rt::Argument::<'_>::new_display::>(move _19) -> [return: bb3, unwind unreachable]; } bb3: { StorageDead(_19); StorageLive(_21); StorageLive(_22); StorageLive(_23); _23 = &_6; _22 = &(*_23); _21 = core::fmt::rt::Argument::<'_>::new_display::(move _22) -> [return: bb4, unwind unreachable]; } bb4: { StorageDead(_22); _17 = [move _18, move _21]; StorageDead(_21); StorageDead(_18); _16 = &_17; _15 = &(*_16); _11 = Arguments::<'_>::new_v1::<3, 2>(move _12, move _15) -> [return: bb5, unwind unreachable]; } bb5: { StorageDead(_15); StorageDead(_12); _10 = _eprint(move _11) -> [return: bb6, unwind unreachable]; } bb6: { StorageDead(_11); StorageDead(_23); StorageDead(_20); StorageDead(_17); StorageDead(_16); StorageDead(_13); StorageDead(_10); _9 = const (); StorageDead(_9); _0 = const (); drop(_8) -> [return: bb8, unwind unreachable]; } bb7: { _0 = const (); goto -> bb9; } bb8: { StorageDead(_8); goto -> bb9; } bb9: { StorageDead(_6); _26 = discriminant(_5); switchInt(move _26) -> [0: bb11, otherwise: bb13]; } bb10: { _25 = const false; StorageDead(_5); - StorageDead(_1); + StorageDead(_29); + StorageDead(_30); + nop; return; } bb11: { switchInt(copy _25) -> [0: bb10, otherwise: bb12]; } bb12: { drop(((_5 as Ok).0: std::boxed::Box)) -> [return: bb10, unwind unreachable]; } bb13: { drop(_5) -> [return: bb10, unwind unreachable]; } }