20 lines
473 B
Rust
20 lines
473 B
Rust
|
// error-pattern: vtable pointer does not have permission
|
||
|
#![feature(ptr_metadata)]
|
||
|
|
||
|
trait Foo {}
|
||
|
|
||
|
impl Foo for u32 {}
|
||
|
|
||
|
fn uwu(thin: *const (), meta: &'static ()) -> *const dyn Foo {
|
||
|
core::ptr::from_raw_parts(thin, unsafe { core::mem::transmute(meta) })
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
unsafe {
|
||
|
let orig = 1_u32;
|
||
|
let x = &orig as &dyn Foo;
|
||
|
let (ptr, meta) = (x as *const dyn Foo).to_raw_parts();
|
||
|
let _ = uwu(ptr, core::mem::transmute(meta));
|
||
|
}
|
||
|
}
|