| // Regression test for issue #76740. |
| // run-fail FIXME: change to run-pass once #76899 lands |
| // compile-flags: -Zmir-opt-level=3 |
| |
| #[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; |
| } |
| } |