| - // MIR for `main` before Derefer |
| + // MIR for `main` after Derefer |
| |
| fn main() -> () { |
| let mut _0: (); |
| let mut _1: std::slice::Iter<'_, i32>; |
| let mut _2: &[i32; 2]; |
| let _3: [i32; 2]; |
| let mut _4: std::slice::Iter<'_, i32>; |
| let mut _5: (); |
| let _6: (); |
| let mut _7: std::option::Option<&i32>; |
| let mut _8: &mut std::slice::Iter<'_, i32>; |
| let mut _9: &mut std::slice::Iter<'_, i32>; |
| let mut _10: isize; |
| let mut _11: !; |
| let mut _13: i32; |
| let mut _14: &[i32; 2]; |
| + let mut _15: &i32; |
| scope 1 { |
| debug iter => _4; |
| let _12: i32; |
| scope 2 { |
| debug foo => _12; |
| } |
| } |
| |
| bb0: { |
| StorageLive(_1); |
| StorageLive(_2); |
| _14 = const main::promoted[0]; |
| _2 = &(*_14); |
| _1 = <&[i32; 2] as IntoIterator>::into_iter(move _2) -> [return: bb1, unwind continue]; |
| } |
| |
| bb1: { |
| StorageDead(_2); |
| PlaceMention(_1); |
| StorageLive(_4); |
| _4 = move _1; |
| goto -> bb2; |
| } |
| |
| bb2: { |
| StorageLive(_6); |
| StorageLive(_7); |
| StorageLive(_8); |
| StorageLive(_9); |
| _9 = &mut _4; |
| _8 = &mut (*_9); |
| _7 = <std::slice::Iter<'_, i32> as Iterator>::next(move _8) -> [return: bb3, unwind continue]; |
| } |
| |
| bb3: { |
| StorageDead(_8); |
| PlaceMention(_7); |
| _10 = discriminant(_7); |
| switchInt(move _10) -> [0: bb6, 1: bb5, otherwise: bb4]; |
| } |
| |
| bb4: { |
| unreachable; |
| } |
| |
| bb5: { |
| StorageLive(_12); |
| - _12 = copy (*((_7 as Some).0: &i32)); |
| + _15 = deref_copy ((_7 as Some).0: &i32); |
| + _12 = copy (*_15); |
| StorageLive(_13); |
| _13 = copy _12; |
| _6 = std::mem::drop::<i32>(move _13) -> [return: bb7, unwind continue]; |
| } |
| |
| bb6: { |
| _0 = const (); |
| StorageDead(_9); |
| StorageDead(_7); |
| StorageDead(_6); |
| StorageDead(_4); |
| StorageDead(_1); |
| return; |
| } |
| |
| bb7: { |
| StorageDead(_13); |
| StorageDead(_12); |
| StorageDead(_9); |
| StorageDead(_7); |
| StorageDead(_6); |
| _5 = const (); |
| goto -> bb2; |
| } |
| } |
| |