//@ test-mir-pass: GVN #![feature(custom_mir, core_intrinsics)] // Check that we do not create overlapping assignments. use std::intrinsics::mir::*; // EMIT_MIR gvn_overlapping.overlapping.GVN.diff #[custom_mir(dialect = "runtime")] fn overlapping(_17: Adt) { // CHECK-LABEL: fn overlapping( // CHECK: let mut [[PTR:.*]]: *mut Adt; // CHECK: (*[[PTR]]) = Adt::Some(copy {{.*}}); mir! { let _33: *mut Adt; let _48: u32; let _73: &Adt; { _33 = core::ptr::addr_of_mut!(_17); _73 = &(*_33); _48 = Field(Variant((*_73), 1), 0); (*_33) = Adt::Some(_48); Return() } } } fn main() { overlapping(Adt::Some(0)); } enum Adt { None, Some(u32), }