diff options
| author | Charles Lew <crlf0710@gmail.com> | 2021-07-17 15:44:19 +0800 |
|---|---|---|
| committer | Charles Lew <crlf0710@gmail.com> | 2021-07-20 22:14:43 +0800 |
| commit | ab171c5279df8ed2449ca995c3e5402abc3cf8e9 (patch) | |
| tree | 572e37198444bbfe7fd345d244d98428a0609b92 /src/test/ui | |
| parent | d2dc4276fdb5d5c4d8d7ff6906213db6c6ed4d7e (diff) | |
| download | rust-ab171c5279df8ed2449ca995c3e5402abc3cf8e9.tar.gz rust-ab171c5279df8ed2449ca995c3e5402abc3cf8e9.zip | |
Add internal attribute and tests.
Diffstat (limited to 'src/test/ui')
| -rw-r--r-- | src/test/ui/traits/vtable/vtable-diamond.rs | 39 | ||||
| -rw-r--r-- | src/test/ui/traits/vtable/vtable-diamond.stderr | 56 | ||||
| -rw-r--r-- | src/test/ui/traits/vtable/vtable-multiple.rs | 31 | ||||
| -rw-r--r-- | src/test/ui/traits/vtable/vtable-multiple.stderr | 44 |
4 files changed, 170 insertions, 0 deletions
diff --git a/src/test/ui/traits/vtable/vtable-diamond.rs b/src/test/ui/traits/vtable/vtable-diamond.rs new file mode 100644 index 00000000000..ea26c60af72 --- /dev/null +++ b/src/test/ui/traits/vtable/vtable-diamond.rs @@ -0,0 +1,39 @@ +// build-fail +//~^ error Vtable +//~^^ error Vtable +#![feature(rustc_attrs)] + +#[rustc_dump_vtable] +trait A { + fn foo_a(&self) {} +} + +#[rustc_dump_vtable] +trait B: A { + fn foo_b(&self) {} +} + +#[rustc_dump_vtable] +trait C: A { + fn foo_c(&self) {} +} + +#[rustc_dump_vtable] +trait D: B + C { + fn foo_d(&self) {} +} + +struct S; + +impl A for S {} +impl B for S {} +impl C for S {} +impl D for S {} + +fn foo(d: &dyn D) { + d.foo_d(); +} + +fn main() { + foo(&S); +} diff --git a/src/test/ui/traits/vtable/vtable-diamond.stderr b/src/test/ui/traits/vtable/vtable-diamond.stderr new file mode 100644 index 00000000000..582c8184107 --- /dev/null +++ b/src/test/ui/traits/vtable/vtable-diamond.stderr @@ -0,0 +1,56 @@ +error: Vtable Entries: [ + MetadataDropInPlace, + MetadataSize, + MetadataAlign, + Method( + DefId(0:4 ~ vtable_diamond[4564]::A::foo_a), + [ + S, + ], + ), + Method( + DefId(0:6 ~ vtable_diamond[4564]::B::foo_b), + [ + S, + ], + ), + Method( + DefId(0:8 ~ vtable_diamond[4564]::C::foo_c), + [ + S, + ], + ), + TraitVPtr( + Binder( + C, + [], + ), + ), + Method( + DefId(0:10 ~ vtable_diamond[4564]::D::foo_d), + [ + S, + ], + ), +] + +error: Vtable Entries: [ + MetadataDropInPlace, + MetadataSize, + MetadataAlign, + Method( + DefId(0:4 ~ vtable_diamond[4564]::A::foo_a), + [ + S, + ], + ), + Method( + DefId(0:8 ~ vtable_diamond[4564]::C::foo_c), + [ + S, + ], + ), +] + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/traits/vtable/vtable-multiple.rs b/src/test/ui/traits/vtable/vtable-multiple.rs new file mode 100644 index 00000000000..d689ae96d41 --- /dev/null +++ b/src/test/ui/traits/vtable/vtable-multiple.rs @@ -0,0 +1,31 @@ +// build-fail +//~^ error Vtable +//~^^ error Vtable +#![feature(rustc_attrs)] + +#[rustc_dump_vtable] +trait A { + fn foo_a(&self) {} +} + +#[rustc_dump_vtable] +trait B { + fn foo_b(&self) {} +} + +#[rustc_dump_vtable] +trait C: A + B { + fn foo_c(&self) {} +} + +struct S; + +impl A for S {} +impl B for S {} +impl C for S {} + +fn foo(c: &dyn C) {} + +fn main() { + foo(&S); +} diff --git a/src/test/ui/traits/vtable/vtable-multiple.stderr b/src/test/ui/traits/vtable/vtable-multiple.stderr new file mode 100644 index 00000000000..222fe9cb0e4 --- /dev/null +++ b/src/test/ui/traits/vtable/vtable-multiple.stderr @@ -0,0 +1,44 @@ +error: Vtable Entries: [ + MetadataDropInPlace, + MetadataSize, + MetadataAlign, + Method( + DefId(0:4 ~ vtable_multiple[5246]::A::foo_a), + [ + S, + ], + ), + Method( + DefId(0:6 ~ vtable_multiple[5246]::B::foo_b), + [ + S, + ], + ), + TraitVPtr( + Binder( + B, + [], + ), + ), + Method( + DefId(0:8 ~ vtable_multiple[5246]::C::foo_c), + [ + S, + ], + ), +] + +error: Vtable Entries: [ + MetadataDropInPlace, + MetadataSize, + MetadataAlign, + Method( + DefId(0:6 ~ vtable_multiple[5246]::B::foo_b), + [ + S, + ], + ), +] + +error: aborting due to 2 previous errors + |
