Add a regression test for copy propagation miscompilation
This commit is contained in:
parent
b873fa6d42
commit
65edf54c25
30
src/test/ui/mir/issue-76740-copy-propagation.rs
Normal file
30
src/test/ui/mir/issue-76740-copy-propagation.rs
Normal file
@ -0,0 +1,30 @@
|
||||
// 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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user