- // MIR for `transmute_then_cast_pointer` before GVN + // MIR for `transmute_then_cast_pointer` after GVN fn transmute_then_cast_pointer(_1: usize, _2: *mut [u8]) -> () { debug addr => _1; debug fat => _2; let mut _0: (); let _3: *mut u8; let mut _4: usize; let _5: (); let mut _6: *const u8; let mut _7: *mut u8; let mut _9: &mut [i32]; let mut _10: &mut [i32; 3]; let mut _11: &mut [i32; 3]; let mut _12: [i32; 3]; let _13: (); let mut _14: *const i32; let mut _15: *const [i32]; let mut _17: *mut [u8]; let _18: (); let mut _19: *const u8; let mut _20: *const [u8]; scope 1 { debug p => _3; let _8: *const [i32]; scope 2 { debug q => _8; let _16: *const [u8]; scope 3 { debug w => _16; } } } bb0: { - StorageLive(_3); + nop; StorageLive(_4); _4 = copy _1; - _3 = move _4 as *mut u8 (Transmute); + _3 = copy _1 as *mut u8 (Transmute); StorageDead(_4); StorageLive(_5); StorageLive(_6); StorageLive(_7); _7 = copy _3; - _6 = move _7 as *const u8 (PtrToPtr); + _6 = copy _1 as *const u8 (Transmute); StorageDead(_7); _5 = takes_const_ptr::(move _6) -> [return: bb1, unwind continue]; } bb1: { StorageDead(_6); StorageDead(_5); - StorageLive(_8); + nop; StorageLive(_9); StorageLive(_10); StorageLive(_11); StorageLive(_12); _12 = [const 1_i32, const 2_i32, const 3_i32]; _11 = &mut _12; _10 = &mut (*_11); _9 = move _10 as &mut [i32] (PointerCoercion(Unsize, Implicit)); StorageDead(_10); _8 = move _9 as *const [i32] (Transmute); StorageDead(_9); StorageDead(_12); StorageDead(_11); StorageLive(_13); StorageLive(_14); StorageLive(_15); _15 = copy _8; - _14 = move _15 as *const i32 (PtrToPtr); + _14 = copy _8 as *const i32 (PtrToPtr); StorageDead(_15); _13 = takes_const_ptr::(move _14) -> [return: bb2, unwind continue]; } bb2: { StorageDead(_14); StorageDead(_13); - StorageLive(_16); + nop; StorageLive(_17); _17 = copy _2; - _16 = move _17 as *const [u8] (Transmute); + _16 = copy _2 as *const [u8] (PtrToPtr); StorageDead(_17); StorageLive(_18); StorageLive(_19); StorageLive(_20); _20 = copy _16; - _19 = move _20 as *const u8 (PtrToPtr); + _19 = copy _2 as *const u8 (PtrToPtr); StorageDead(_20); _18 = takes_const_ptr::(move _19) -> [return: bb3, unwind continue]; } bb3: { StorageDead(_19); StorageDead(_18); _0 = const (); - StorageDead(_16); - StorageDead(_8); - StorageDead(_3); + nop; + nop; + nop; return; } }