28 lines
673 B
Rust
28 lines
673 B
Rust
// 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
|