blob: 92522f76b3d8f5bff46ba6492b8d4af1ea725b42 [file]
#![feature(core_intrinsics, custom_mir)]
#![allow(internal_features)]
#![allow(unused_assignments)]
use core::intrinsics::mir::*;
fn main() {
test8345(&1, |ptrptr| unsafe {
let ptrptr = std::ptr::from_mut(ptrptr);
ptrptr.cast::<(usize, usize)>().write((0, 1))
});
}
trait A {}
impl<T> A for T {}
#[custom_mir(dialect = "runtime", phase = "optimized")]
fn test8345(mut ptr: &dyn A, overwrite: fn(&mut &dyn A)) {
mir! {
let ptrptr;
let _unused;
let idk;
{
ptrptr = &mut ptr;
// Overwrite `ptr` to make it invalid.
Call(_unused = overwrite(ptrptr), ReturnTo(ret), UnwindContinue())
}
ret = {
// Do something with `ptr`.
idk = PtrMetadata(ptr); //~ERROR: null reference
Return()
}
}
}