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>
109 lines
1.9 KiB
Rust
109 lines
1.9 KiB
Rust
#[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,
|
|
}
|
|
|
|
#[repr(packed, C)]
|
|
pub struct PackedStruct {
|
|
pub arg1: usize,
|
|
pub arg2: *mut u8,
|
|
}
|
|
|
|
#[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(packed, C)]
|
|
pub union PackedUnion {
|
|
pub variant1: usize,
|
|
pub variant2: *mut u8,
|
|
}
|
|
|
|
// #[repr(packed(n), C)] structs are currently unsupported.
|
|
#[repr(packed(4), C)]
|
|
pub struct UnsupportedPacked4Struct {
|
|
pub arg1: usize,
|
|
pub arg2: *mut u8,
|
|
}
|
|
|
|
// #[repr(packed(n), C)] unions are currently unsupported.
|
|
#[repr(packed(4), C)]
|
|
pub union UnsupportedPacked4Union {
|
|
pub variant1: usize,
|
|
pub variant2: *mut u8,
|
|
}
|
|
|
|
// #[repr(align(n), C)] enums are currently unsupported.
|
|
#[repr(align(4), C)]
|
|
pub enum UnsupportedAlign4Enum {
|
|
Variant1,
|
|
Variant2,
|
|
}
|
|
|
|
// Non-repr(C) structs aren't translated.
|
|
#[repr(align(4))]
|
|
pub struct RustAlign4Struct {
|
|
pub arg1: usize,
|
|
pub arg2: *mut u8,
|
|
}
|
|
|
|
// Non-repr(C) structs aren't translated.
|
|
#[repr(packed)]
|
|
pub struct RustPackedStruct {
|
|
pub arg1: usize,
|
|
pub arg2: *mut u8,
|
|
}
|
|
|
|
// Non-repr(C) unions aren't translated.
|
|
#[repr(align(4))]
|
|
pub struct RustAlign4Union {
|
|
pub arg1: usize,
|
|
pub arg2: *mut u8,
|
|
}
|
|
|
|
// Non-repr(C) unions aren't translated.
|
|
#[repr(packed)]
|
|
pub struct RustPackedUnion {
|
|
pub arg1: usize,
|
|
pub arg2: *mut u8,
|
|
}
|