blob: f4349286801086f830808d611e5b74d7fdd4189b [file] [log] [blame]
// This should fail even without validation
//@compile-flags: -Zmiri-disable-validation -Zmiri-permissive-provenance
static mut LEAK: usize = 0;
fn fill(v: &mut i32) {
unsafe {
LEAK = v as *mut _ as usize;
}
}
fn evil() {
let _ref = unsafe { &mut *(LEAK as *mut i32) }; //~ ERROR: is a dangling pointer
}
fn main() {
let _y;
{
let mut x = 0i32;
fill(&mut x);
_y = x;
}
// Now we use a pointer to `x` which is no longer in scope, and thus dead (even though the
// `main` stack frame still exists). We even try going through a `usize` for extra sneakiness!
evil();
}