| #[repr(C)] | |
| #[derive(Copy, Clone)] | |
| struct ComplexStruct { | |
| part_1: Part1, | |
| part_2: Part2, | |
| part_3: u32, | |
| } | |
| #[repr(C)] | |
| #[derive(Copy, Clone)] | |
| struct Part1 { | |
| high: u16, | |
| low: u16, | |
| } | |
| #[repr(C)] | |
| #[derive(Copy, Clone)] | |
| struct Part2 { | |
| bits: u32, | |
| } | |
| extern "C" { | |
| fn pass_struct_complex(s: ComplexStruct, high: u16, low: u16, bits: u32) -> i32; | |
| } | |
| fn main() { | |
| let arg = std::mem::MaybeUninit::<ComplexStruct>::uninit(); | |
| unsafe { pass_struct_complex(*arg.as_ptr(), 0, 0, 0) }; //~ ERROR: Undefined Behavior: constructing invalid value | |
| } |