- // MIR for `wide_ptr_provenance` before GVN + // MIR for `wide_ptr_provenance` after GVN fn wide_ptr_provenance() -> () { let mut _0: (); let _1: *const dyn std::marker::Send; let mut _2: *const dyn std::marker::Send; let _3: &dyn std::marker::Send; let mut _4: &i32; let _5: &i32; let _6: i32; let mut _8: *const dyn std::marker::Send; let _9: &dyn std::marker::Send; let mut _10: &i32; let _11: &i32; let _12: i32; let _13: (); let mut _14: bool; let mut _15: *const dyn std::marker::Send; let mut _16: *const dyn std::marker::Send; let mut _17: *const dyn std::marker::Send; let _18: (); let mut _19: bool; let mut _20: *const dyn std::marker::Send; let mut _21: *const dyn std::marker::Send; let mut _22: *const dyn std::marker::Send; let _23: (); let mut _24: bool; let mut _25: *const dyn std::marker::Send; let mut _26: *const dyn std::marker::Send; let mut _27: *const dyn std::marker::Send; let _28: (); let mut _29: bool; let mut _30: *const dyn std::marker::Send; let mut _31: *const dyn std::marker::Send; let mut _32: *const dyn std::marker::Send; let _33: (); let mut _34: bool; let mut _35: *const dyn std::marker::Send; let mut _36: *const dyn std::marker::Send; let mut _37: *const dyn std::marker::Send; let _38: (); let mut _39: bool; let mut _40: *const dyn std::marker::Send; let mut _41: *const dyn std::marker::Send; let mut _42: *const dyn std::marker::Send; let mut _44: &i32; scope 1 { debug a => _1; let _7: *const dyn std::marker::Send; let mut _43: &i32; scope 2 { debug b => _7; } } bb0: { StorageLive(_1); - StorageLive(_2); + nop; StorageLive(_3); StorageLive(_4); StorageLive(_5); _44 = const wide_ptr_provenance::promoted[1]; _5 = &(*_44); _4 = &(*_5); _3 = move _4 as &dyn std::marker::Send (PointerCoercion(Unsize, AsCast)); StorageDead(_4); _2 = &raw const (*_3); - _1 = move _2 as *const dyn std::marker::Send (PointerCoercion(Unsize, Implicit)); - StorageDead(_2); + _1 = copy _2; + nop; StorageDead(_5); StorageDead(_3); StorageLive(_7); - StorageLive(_8); + nop; StorageLive(_9); StorageLive(_10); StorageLive(_11); _43 = const wide_ptr_provenance::promoted[0]; _11 = &(*_43); _10 = &(*_11); _9 = move _10 as &dyn std::marker::Send (PointerCoercion(Unsize, AsCast)); StorageDead(_10); _8 = &raw const (*_9); - _7 = move _8 as *const dyn std::marker::Send (PointerCoercion(Unsize, Implicit)); - StorageDead(_8); + _7 = copy _8; + nop; StorageDead(_11); StorageDead(_9); StorageLive(_13); StorageLive(_14); StorageLive(_15); - _15 = copy _1; + _15 = copy _2; StorageLive(_16); StorageLive(_17); - _17 = copy _7; - _16 = move _17 as *const dyn std::marker::Send (PointerCoercion(Unsize, Implicit)); + _17 = copy _8; + _16 = copy _8; StorageDead(_17); - _14 = Eq(move _15, move _16); + _14 = Eq(copy _2, copy _8); StorageDead(_16); StorageDead(_15); _13 = opaque::(move _14) -> [return: bb1, unwind unreachable]; } bb1: { StorageDead(_14); StorageDead(_13); StorageLive(_18); StorageLive(_19); StorageLive(_20); - _20 = copy _1; + _20 = copy _2; StorageLive(_21); StorageLive(_22); - _22 = copy _7; - _21 = move _22 as *const dyn std::marker::Send (PointerCoercion(Unsize, Implicit)); + _22 = copy _8; + _21 = copy _8; StorageDead(_22); - _19 = Ne(move _20, move _21); + _19 = Ne(copy _2, copy _8); StorageDead(_21); StorageDead(_20); _18 = opaque::(move _19) -> [return: bb2, unwind unreachable]; } bb2: { StorageDead(_19); StorageDead(_18); StorageLive(_23); StorageLive(_24); StorageLive(_25); - _25 = copy _1; + _25 = copy _2; StorageLive(_26); StorageLive(_27); - _27 = copy _7; - _26 = move _27 as *const dyn std::marker::Send (PointerCoercion(Unsize, Implicit)); + _27 = copy _8; + _26 = copy _8; StorageDead(_27); - _24 = Lt(move _25, move _26); + _24 = Lt(copy _2, copy _8); StorageDead(_26); StorageDead(_25); _23 = opaque::(move _24) -> [return: bb3, unwind unreachable]; } bb3: { StorageDead(_24); StorageDead(_23); StorageLive(_28); StorageLive(_29); StorageLive(_30); - _30 = copy _1; + _30 = copy _2; StorageLive(_31); StorageLive(_32); - _32 = copy _7; - _31 = move _32 as *const dyn std::marker::Send (PointerCoercion(Unsize, Implicit)); + _32 = copy _8; + _31 = copy _8; StorageDead(_32); - _29 = Le(move _30, move _31); + _29 = Le(copy _2, copy _8); StorageDead(_31); StorageDead(_30); _28 = opaque::(move _29) -> [return: bb4, unwind unreachable]; } bb4: { StorageDead(_29); StorageDead(_28); StorageLive(_33); StorageLive(_34); StorageLive(_35); - _35 = copy _1; + _35 = copy _2; StorageLive(_36); StorageLive(_37); - _37 = copy _7; - _36 = move _37 as *const dyn std::marker::Send (PointerCoercion(Unsize, Implicit)); + _37 = copy _8; + _36 = copy _8; StorageDead(_37); - _34 = Gt(move _35, move _36); + _34 = Gt(copy _2, copy _8); StorageDead(_36); StorageDead(_35); _33 = opaque::(move _34) -> [return: bb5, unwind unreachable]; } bb5: { StorageDead(_34); StorageDead(_33); StorageLive(_38); StorageLive(_39); StorageLive(_40); - _40 = copy _1; + _40 = copy _2; StorageLive(_41); StorageLive(_42); - _42 = copy _7; - _41 = move _42 as *const dyn std::marker::Send (PointerCoercion(Unsize, Implicit)); + _42 = copy _8; + _41 = copy _8; StorageDead(_42); - _39 = Ge(move _40, move _41); + _39 = Ge(copy _2, copy _8); StorageDead(_41); StorageDead(_40); _38 = opaque::(move _39) -> [return: bb6, unwind unreachable]; } bb6: { StorageDead(_39); StorageDead(_38); _0 = const (); StorageDead(_7); StorageDead(_1); return; } }