| // Related to <https://github.com/rust-lang/rust/issues/113840> |
| // |
| // This test makes sure that multiple auto traits can reuse the |
| // same pointer for upcasting (e.g. `Send`/`Sync`) |
| |
| #![crate_type = "lib"] |
| #![feature(rustc_attrs, auto_traits)] |
| |
| // Markers |
| auto trait M0 {} |
| auto trait M1 {} |
| auto trait M2 {} |
| |
| // Just a trait with a method |
| trait T { |
| fn method(&self) {} |
| } |
| |
| trait A: M0 + M1 + M2 + T {} |
| |
| trait B: M0 + M1 + T + M2 {} |
| |
| trait C: M0 + T + M1 + M2 {} |
| |
| trait D: T + M0 + M1 + M2 {} |
| |
| struct S; |
| |
| impl M0 for S {} |
| impl M1 for S {} |
| impl M2 for S {} |
| impl T for S {} |
| |
| #[rustc_dump_vtable] |
| impl A for S {} |
| //~^ ERROR vtable entries |
| |
| #[rustc_dump_vtable] |
| impl B for S {} |
| //~^ ERROR vtable entries |
| |
| #[rustc_dump_vtable] |
| impl C for S {} |
| //~^ ERROR vtable entries |
| |
| #[rustc_dump_vtable] |
| impl D for S {} |
| //~^ ERROR vtable entries |
| |
| fn main() {} |