// skip-filecheck // unit-test: CopyProp #![feature(custom_mir, core_intrinsics)] #![allow(unused_assignments)] extern crate core; use core::intrinsics::mir::*; #[custom_mir(dialect = "analysis", phase = "post-cleanup")] fn f(c: bool) -> bool { mir!( let a: bool; let b: bool; { Goto(bb1) } bb1 = { b = c; match b { false => bb3, _ => bb2 }} // This assignment to `a` does not dominate the use in `bb3`. // It should not be replaced by `b`. bb2 = { a = b; c = false; Goto(bb1) } bb3 = { RET = a; Return() } ) } fn main() { assert_eq!(true, f(true)); } // EMIT_MIR non_dominate.f.CopyProp.diff