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 }