// Regression test for issue #76740. | |
//@ run-pass | |
//@ compile-flags: -Zmir-opt-level=4 | |
#[derive(Copy, Clone)] | |
pub struct V([usize; 4]); | |
impl V { | |
fn new() -> Self { | |
V([0; 4]) | |
} | |
#[inline(never)] | |
fn check(mut self) { | |
assert_eq!(self.0[0], 0); | |
self.0[0] = 1; | |
} | |
} | |
fn main() { | |
let v = V::new(); | |
let mut i = 0; | |
while i != 10 { | |
// Copy propagation incorrectly assumed that Operand::Move does not | |
// mutate the local, and used the same v for each V::check call, | |
// rather than a copy. | |
v.check(); | |
i += 1; | |
} | |
} |