//@ normalize-stderr-test: "pref: Align\([1-8] bytes\)" -> "pref: $$SOME_ALIGN" #![feature(never_type, rustc_attrs, type_alias_impl_trait, repr_simd)] #![crate_type = "lib"] #[rustc_layout(debug)] #[derive(Copy, Clone)] enum E { Foo, Bar(!, i32, i32) } //~ ERROR: layout_of #[rustc_layout(debug)] struct S { f1: i32, f2: (), f3: i32 } //~ ERROR: layout_of #[rustc_layout(debug)] union U { f1: (i32, i32), f3: i32 } //~ ERROR: layout_of #[rustc_layout(debug)] type Test = Result; //~ ERROR: layout_of #[rustc_layout(debug)] type T = impl std::fmt::Debug; //~ ERROR: layout_of fn f() -> T { 0i32 } #[rustc_layout(debug)] pub union V { //~ ERROR: layout_of a: [u16; 0], b: u8, } #[rustc_layout(debug)] pub union W { //~ ERROR: layout_of b: u8, a: [u16; 0], } #[rustc_layout(debug)] pub union Y { //~ ERROR: layout_of b: [u8; 0], a: [u16; 0], } #[rustc_layout(debug)] #[repr(packed(1))] union P1 { x: u32 } //~ ERROR: layout_of #[rustc_layout(debug)] #[repr(packed(1))] union P2 { x: (u32, u32) } //~ ERROR: layout_of #[repr(simd)] #[derive(Copy, Clone)] struct F32x4([f32; 4]); #[rustc_layout(debug)] #[repr(packed(1))] union P3 { x: F32x4 } //~ ERROR: layout_of #[rustc_layout(debug)] #[repr(packed(1))] union P4 { x: E } //~ ERROR: layout_of #[rustc_layout(debug)] #[repr(packed(1))] union P5 { zst: [u16; 0], byte: u8 } //~ ERROR: layout_of #[rustc_layout(debug)] type X = std::mem::MaybeUninit; //~ ERROR: layout_of #[rustc_layout(debug)] const C: () = (); //~ ERROR: can only be applied to impl S { #[rustc_layout(debug)] const C: () = (); //~ ERROR: can only be applied to } #[rustc_layout(debug)] type Impossible = (str, str); //~ ERROR: cannot be known at compilation time // Test that computing the layout of an empty union doesn't ICE. #[rustc_layout(debug)] union EmptyUnion {} //~ ERROR: has an unknown layout //~^ ERROR: unions cannot have zero fields