| // 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; | |
| } | |
| } |