mirror of https://github.com/rust-lang/rust.git
40 lines
808 B
Rust
40 lines
808 B
Rust
// skip-filecheck
|
|
//@ test-mir-pass: 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
|