| // Validation stops this too early. | 
 | //@compile-flags: -Zmiri-disable-validation | 
 |  | 
 | trait Foo: PartialEq<i32> + std::fmt::Debug + Send + Sync { | 
 |     #[allow(dead_code)] | 
 |     fn a(&self) -> i32 { | 
 |         10 | 
 |     } | 
 |  | 
 |     #[allow(dead_code)] | 
 |     fn z(&self) -> i32 { | 
 |         11 | 
 |     } | 
 |  | 
 |     #[allow(dead_code)] | 
 |     fn y(&self) -> i32 { | 
 |         12 | 
 |     } | 
 | } | 
 |  | 
 | trait Bar: Foo { | 
 |     #[allow(dead_code)] | 
 |     fn b(&self) -> i32 { | 
 |         20 | 
 |     } | 
 |  | 
 |     #[allow(dead_code)] | 
 |     fn w(&self) -> i32 { | 
 |         21 | 
 |     } | 
 | } | 
 |  | 
 | trait Baz: Bar { | 
 |     #[allow(dead_code)] | 
 |     fn c(&self) -> i32 { | 
 |         30 | 
 |     } | 
 | } | 
 |  | 
 | impl Foo for i32 { | 
 |     fn a(&self) -> i32 { | 
 |         100 | 
 |     } | 
 | } | 
 |  | 
 | impl Bar for i32 { | 
 |     fn b(&self) -> i32 { | 
 |         200 | 
 |     } | 
 | } | 
 |  | 
 | impl Baz for i32 { | 
 |     fn c(&self) -> i32 { | 
 |         300 | 
 |     } | 
 | } | 
 |  | 
 | fn main() { | 
 |     unsafe { | 
 |         let baz: &dyn Baz = &1; | 
 |         let baz_fake: *const dyn Bar = std::mem::transmute(baz); | 
 |         let _err = baz_fake as *const dyn Foo; | 
 |         //~^ERROR: using vtable for `Baz` but `Bar` was expected | 
 |     } | 
 | } |