| #![allow(unused)] |
| |
| #[repr(u16)] |
| enum DeviceKind { |
| Nil = 0, |
| } |
| |
| #[repr(C, packed)] |
| struct DeviceInfo { |
| endianness: u8, |
| device_kind: DeviceKind, |
| } |
| |
| fn main() { |
| // The layout of `Option<(DeviceInfo, u64)>` is funny: it uses the |
| // `DeviceKind` enum as niche, so that is offset 1, but the niche type is u16! |
| // So despite the type having alignment 8 and the field type alignment 2, |
| // the actual alignment is 1. |
| let x = None::<(DeviceInfo, u8)>; |
| let y = None::<(DeviceInfo, u16)>; |
| let z = None::<(DeviceInfo, u64)>; |
| format!("{} {} {}", x.is_some(), y.is_some(), y.is_some()); |
| } |