#![feature(rustc_attrs)] // Show that `homogeneous_aggregate` code ignores zero-length C // arrays. This matches the recent C standard, though not the // behavior of all older compilers, which sometimes consider `T[0]` to // be a "flexible array member" (see discussion on #56877 for // details). #[repr(C)] pub struct Foo { x: u32 } #[repr(C)] pub struct Middle { pub a: f32, pub foo: [Foo; 0], pub b: f32, } #[rustc_layout(homogeneous_aggregate)] pub type TestMiddle = Middle; //~^ ERROR homogeneous_aggregate: Ok(Homogeneous #[repr(C)] pub struct Final { pub a: f32, pub b: f32, pub foo: [Foo; 0], } #[rustc_layout(homogeneous_aggregate)] pub type TestFinal = Final; //~^ ERROR homogeneous_aggregate: Ok(Homogeneous fn main() { }