| //@ run-pass | |
| #![allow(dead_code)] | |
| #![allow(non_upper_case_globals)] | |
| struct CustomAutoRooterVFTable { | |
| trace: unsafe extern "C" fn(this: *mut i32, trc: *mut u32), | |
| } | |
| unsafe trait CustomAutoTraceable: Sized { | |
| const vftable: CustomAutoRooterVFTable = CustomAutoRooterVFTable { | |
| trace: Self::trace, | |
| }; | |
| unsafe extern "C" fn trace(this: *mut i32, trc: *mut u32) { | |
| let this = this as *const Self; | |
| let this = this.as_ref().unwrap(); | |
| Self::do_trace(this, trc); | |
| } | |
| fn do_trace(&self, trc: *mut u32); | |
| } | |
| unsafe impl CustomAutoTraceable for () { | |
| fn do_trace(&self, _: *mut u32) { | |
| // nop | |
| } | |
| } | |
| fn main() { | |
| let _ = <()>::vftable; | |
| } |