The tests are very straightforward, and effecitvely are just ensuring that the formatting works correctly and is included in all of the important cases. It's also very important to ensure we do not generate laid-out structs for layouts which we cannot reasonably represent in C (such as in cases where we weren't told what annotation to use for packed and specifically-aligned structures). Thus, add some tests to verify that this is the case. Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
62 lines
1.0 KiB
Rust
62 lines
1.0 KiB
Rust
#[repr(align(1), C)]
|
|
pub union Align1Union {
|
|
pub variant1: usize,
|
|
pub variant2: *mut u8,
|
|
}
|
|
|
|
#[repr(align(4), C)]
|
|
pub union Align4Union {
|
|
pub variant1: usize,
|
|
pub variant2: *mut u8,
|
|
}
|
|
|
|
#[repr(align(16), C)]
|
|
pub union Align16Union {
|
|
pub variant1: usize,
|
|
pub variant2: *mut u8,
|
|
}
|
|
|
|
#[repr(align(1), C)]
|
|
pub struct Align1Struct {
|
|
pub arg1: usize,
|
|
pub arg2: *mut u8,
|
|
}
|
|
|
|
#[repr(align(2), C)]
|
|
pub struct Align2Struct {
|
|
pub arg1: usize,
|
|
pub arg2: *mut u8,
|
|
}
|
|
|
|
#[repr(align(4), C)]
|
|
pub struct Align4Struct {
|
|
pub arg1: usize,
|
|
pub arg2: *mut u8,
|
|
}
|
|
|
|
#[repr(align(8), C)]
|
|
pub struct Align8Struct {
|
|
pub arg1: usize,
|
|
pub arg2: *mut u8,
|
|
}
|
|
|
|
#[repr(align(32), C)]
|
|
pub struct Align32Struct {
|
|
pub arg1: usize,
|
|
pub arg2: *mut u8,
|
|
}
|
|
|
|
// Opaque because packed is not defined.
|
|
#[repr(packed, C)]
|
|
pub struct OpaquePackedStruct {
|
|
pub arg1: usize,
|
|
pub arg2: *mut u8,
|
|
}
|
|
|
|
// Opaque because packed is not defined.
|
|
#[repr(packed, C)]
|
|
pub union OpaquePackedUnion {
|
|
pub variant1: usize,
|
|
pub variant2: *mut u8,
|
|
}
|