| //@ run-pass | |
| #![allow(dead_code)] | |
| #![allow(unused_comparisons)] | |
| use std::mem; | |
| #[repr(packed)] | |
| struct P1<T, S> { | |
| a: T, | |
| b: u8, | |
| c: S | |
| } | |
| #[repr(packed(2))] | |
| struct P2<T, S> { | |
| a: T, | |
| b: u8, | |
| c: S | |
| } | |
| #[repr(C, packed(4))] | |
| struct P4C<T, S> { | |
| a: T, | |
| b: u8, | |
| c: S | |
| } | |
| macro_rules! check { | |
| ($t:ty, $align:expr, $size:expr) => ({ | |
| assert_eq!(mem::align_of::<$t>(), $align); | |
| assert_eq!(mem::size_of::<$t>(), $size); | |
| }); | |
| } | |
| pub fn main() { | |
| check!(P1<u8, u8>, 1, 3); | |
| check!(P1<u64, u16>, 1, 11); | |
| check!(P2<u8, u8>, 1, 3); | |
| check!(P2<u64, u16>, 2, 12); | |
| check!(P4C<u8, u8>, 1, 3); | |
| check!(P4C<u16, u64>, 4, 12); | |
| } |