// run-pass // check that derive on a packed struct does not call field // methods with a misaligned field. use std::mem; #[derive(Copy, Clone)] struct Aligned(usize); #[inline(never)] fn check_align(ptr: *const Aligned) { assert_eq!(ptr as usize % mem::align_of::(), 0); } impl PartialEq for Aligned { fn eq(&self, other: &Self) -> bool { check_align(self); check_align(other); self.0 == other.0 } } #[repr(packed)] #[derive(Copy, Clone, PartialEq)] struct Packed(Aligned, Aligned); #[derive(PartialEq)] #[repr(C)] struct Dealigned(u8, T); fn main() { let d1 = Dealigned(0, Packed(Aligned(1), Aligned(2))); let ck = d1 == d1; assert!(ck); }