//@ run-pass //@ ignore-backends: gcc use std::fmt::Debug; use std::hint::black_box; #[repr(C)] #[derive(Copy, Clone, PartialEq, Debug, Default)] struct Regular(f32, f64); #[repr(C, packed)] #[derive(Copy, Clone, PartialEq, Debug, Default)] struct Packed(f32, f64); #[repr(C, align(64))] #[derive(Copy, Clone, PartialEq, Debug, Default)] struct AlignedF32(f32); #[repr(C)] #[derive(Copy, Clone, PartialEq, Debug, Default)] struct Aligned(f64, AlignedF32); #[inline(never)] extern "C" fn read(x: &T) -> T { *black_box(x) } #[inline(never)] extern "C" fn write(x: T, dest: &mut T) { *dest = black_box(x) } #[track_caller] fn check(x: T) { assert_eq!(read(&x), x); let mut out = T::default(); write(x, &mut out); assert_eq!(out, x); } fn main() { check(Regular(1.0, 2.0)); check(Packed(3.0, 4.0)); check(Aligned(5.0, AlignedF32(6.0))); }