//@ test-mir-pass: DestinationPropagation // EMIT_MIR_FOR_EACH_PANIC_STRATEGY #![feature(custom_mir, core_intrinsics)] #![allow(internal_features)] use std::intrinsics::mir::*; use std::mem::MaybeUninit; fn dump_var(_: T) {} // EMIT_MIR aggregate.rewrap.DestinationPropagation.diff #[custom_mir(dialect = "runtime")] fn rewrap() -> (u8,) { // CHECK-LABEL: fn rewrap( // CHECK: (_0.0: u8) = const 0_u8; // CHECK: _2 = (copy (_0.0: u8),); // CHECK: _0 = copy _2; mir! { let _1: (u8,); let _2: (u8,); { _1.0 = 0; RET = _1; _2 = (RET.0, ); RET = _2; Return() } } } // EMIT_MIR aggregate.swap.DestinationPropagation.diff #[custom_mir(dialect = "runtime")] fn swap() -> (MaybeUninit<[u8; 10]>, MaybeUninit<[u8; 10]>) { // CHECK-LABEL: fn swap( // CHECK: _0 = const // CHECK: _2 = copy _0; // CHECK: _0 = (copy (_2.1: {{.*}}), copy (_2.0: {{.*}})); mir! { let _1: (MaybeUninit<[u8; 10]>, MaybeUninit<[u8; 10]>); let _2: (MaybeUninit<[u8; 10]>, MaybeUninit<[u8; 10]>); let _3: (); { _1 = const { (MaybeUninit::new([0; 10]), MaybeUninit::new([1; 10])) }; _2 = _1; _1 = (_2.1, _2.0); RET = _1; Return() } } }