- // MIR for `remove_storage_dead` before GVN + // MIR for `remove_storage_dead` after GVN fn remove_storage_dead(_1: fn() -> AlwaysSome) -> AlwaysSome { debug f => _1; let mut _0: AlwaysSome; let _2: T; let mut _3: AlwaysSome; let mut _4: fn() -> AlwaysSome; let _5: T; let mut _6: T; let mut _7: isize; let mut _8: isize; scope 1 { debug v => _2; } scope 2 { debug v => _5; } bb0: { StorageLive(_2); - StorageLive(_3); + nop; StorageLive(_4); _4 = copy _1; - _3 = move _4() -> [return: bb1, unwind unreachable]; + _3 = copy _1() -> [return: bb1, unwind unreachable]; } bb1: { StorageDead(_4); - StorageLive(_5); - _5 = move ((_3 as Some).0: T); - _2 = move _5; - StorageDead(_5); + nop; + _5 = copy ((_3 as Some).0: T); + _2 = copy _5; + nop; _7 = discriminant(_3); - StorageDead(_3); + nop; StorageLive(_6); - _6 = move _2; - _0 = AlwaysSome::::Some(move _6); + _6 = copy _5; + _0 = copy _3; StorageDead(_6); StorageDead(_2); return; } }