also print rustc_layout on impl trait type aliases

This commit is contained in:
Ralf Jung 2020-04-05 17:07:06 +02:00
parent 7b657d340d
commit 4a75883a78
3 changed files with 43 additions and 3 deletions

View File

@ -27,7 +27,8 @@ fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) {
ItemKind::TyAlias(..) ItemKind::TyAlias(..)
| ItemKind::Enum(..) | ItemKind::Enum(..)
| ItemKind::Struct(..) | ItemKind::Struct(..)
| ItemKind::Union(..) => { | ItemKind::Union(..)
| ItemKind::OpaqueTy(..) => {
for attr in self.tcx.get_attrs(item_def_id).iter() { for attr in self.tcx.get_attrs(item_def_id).iter() {
if attr.check_name(sym::rustc_layout) { if attr.check_name(sym::rustc_layout) {
self.dump_layout_of(item_def_id, item, attr); self.dump_layout_of(item_def_id, item, attr);

View File

@ -1,5 +1,5 @@
// normalize-stderr-test "pref: Align \{\n *pow2: [1-3],\n *\}" -> "pref: $$PREF_ALIGN" // normalize-stderr-test "pref: Align \{\n *pow2: [1-3],\n *\}" -> "pref: $$PREF_ALIGN"
#![feature(never_type, rustc_attrs)] #![feature(never_type, rustc_attrs, type_alias_impl_trait)]
#![crate_type = "lib"] #![crate_type = "lib"]
#[rustc_layout(debug)] #[rustc_layout(debug)]
@ -13,3 +13,10 @@ union U { f1: (i32, i32), f3: i32 } //~ ERROR: layout debugging
#[rustc_layout(debug)] #[rustc_layout(debug)]
type Test = Result<i32, i32>; //~ ERROR: layout debugging type Test = Result<i32, i32>; //~ ERROR: layout debugging
#[rustc_layout(debug)]
type T = impl std::fmt::Debug; //~ ERROR: layout debugging
fn f() -> T {
0i32
}

View File

@ -315,5 +315,37 @@ error: layout debugging: Layout {
LL | type Test = Result<i32, i32>; LL | type Test = Result<i32, i32>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 4 previous errors error: layout debugging: Layout {
fields: Union(
0,
),
variants: Single {
index: 0,
},
abi: Scalar(
Scalar {
value: Int(
I32,
true,
),
valid_range: 0..=4294967295,
},
),
largest_niche: None,
align: AbiAndPrefAlign {
abi: Align {
pow2: 2,
},
pref: $PREF_ALIGN,
},
size: Size {
raw: 4,
},
}
--> $DIR/debug.rs:18:1
|
LL | type T = impl std::fmt::Debug;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 5 previous errors