17 lines
437 B
Rust
17 lines
437 B
Rust
|
fn foo(x: &mut i32) -> i32 {
|
||
|
*x = 5;
|
||
|
unknown_code(&*x);
|
||
|
*x // must return 5
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
println!("{}", foo(&mut 0));
|
||
|
}
|
||
|
|
||
|
// If we replace the `*const` by `&`, my current dev version of miri
|
||
|
// *does* find the problem, but not for a good reason: It finds it because
|
||
|
// of barriers, and we shouldn't rely on unknown code using barriers.
|
||
|
fn unknown_code(x: *const i32) {
|
||
|
unsafe { *(x as *mut i32) = 7; } //~ ERROR barrier
|
||
|
}
|