mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 13:04:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			96 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #![feature(rustc_attrs)]
 | |
| 
 | |
| // Various tests around the behavior of zero-sized arrays and
 | |
| // unions. This matches the behavior of modern C compilers, though
 | |
| // older compilers (and sometimes clang) treat `T[0]` as a "flexible
 | |
| // array member". See more
 | |
| // details in #56877.
 | |
| 
 | |
| #[derive(Copy, Clone)]
 | |
| #[repr(C)]
 | |
| struct Empty { }
 | |
| 
 | |
| #[derive(Copy, Clone)]
 | |
| #[repr(C)]
 | |
| struct Empty2 {
 | |
|     e: Empty
 | |
| }
 | |
| 
 | |
| #[derive(Copy, Clone)]
 | |
| #[repr(C)]
 | |
| struct Empty3 {
 | |
|     z: [f32; 0],
 | |
| }
 | |
| 
 | |
| #[derive(Copy, Clone)]
 | |
| #[repr(C)]
 | |
| struct Empty4 {
 | |
|     e: Empty3
 | |
| }
 | |
| 
 | |
| #[repr(C)]
 | |
| union U1 {
 | |
|     s: Empty
 | |
| }
 | |
| 
 | |
| #[repr(C)]
 | |
| union U2 {
 | |
|     s: Empty2
 | |
| }
 | |
| 
 | |
| #[repr(C)]
 | |
| union U3 {
 | |
|     s: Empty3
 | |
| }
 | |
| 
 | |
| #[repr(C)]
 | |
| union U4 {
 | |
|     s: Empty4
 | |
| }
 | |
| 
 | |
| #[repr(C)]
 | |
| struct Baz1 {
 | |
|     x: f32,
 | |
|     y: f32,
 | |
|     u: U1,
 | |
| }
 | |
| 
 | |
| #[rustc_layout(homogeneous_aggregate)]
 | |
| type TestBaz1 = Baz1;
 | |
| //~^ ERROR homogeneous_aggregate: Ok(Homogeneous
 | |
| 
 | |
| #[repr(C)]
 | |
| struct Baz2 {
 | |
|     x: f32,
 | |
|     y: f32,
 | |
|     u: U2,
 | |
| }
 | |
| 
 | |
| #[rustc_layout(homogeneous_aggregate)]
 | |
| type TestBaz2 = Baz2;
 | |
| //~^ ERROR homogeneous_aggregate: Ok(Homogeneous
 | |
| 
 | |
| #[repr(C)]
 | |
| struct Baz3 {
 | |
|     x: f32,
 | |
|     y: f32,
 | |
|     u: U3,
 | |
| }
 | |
| 
 | |
| #[rustc_layout(homogeneous_aggregate)]
 | |
| type TestBaz3 = Baz3;
 | |
| //~^ ERROR homogeneous_aggregate: Ok(Homogeneous
 | |
| 
 | |
| #[repr(C)]
 | |
| struct Baz4 {
 | |
|     x: f32,
 | |
|     y: f32,
 | |
|     u: U4,
 | |
| }
 | |
| 
 | |
| #[rustc_layout(homogeneous_aggregate)]
 | |
| type TestBaz4 = Baz4;
 | |
| //~^ ERROR homogeneous_aggregate: Ok(Homogeneous
 | |
| 
 | |
| fn main() { }
 | 
