// This should fail even without validation
// compile-flags: -Zmir-emit-validate=0 -Zmiri-disable-validation

static mut LEAK: usize = 0;

fn fill(v: &mut i32) {
    unsafe { LEAK = v as *mut _ as usize; }
}

fn evil() {
    let v = unsafe { &mut *(LEAK as *mut i32) };
    let _x = *v; //~ ERROR dangling pointer was dereferenced
}

fn main() {
    let _y;
    {
        let mut x = 0i32;
        fill(&mut x);
        _y = x;
    }
    evil();
}
