Per the Reference:
The only data layout guarantees made by this representation are those required for soundness. They are:
- The fields are properly aligned.
- The fields do not overlap.
- The alignment of the type is at least the maximum alignment of its fields.
We currently require repr(C, packed), not just repr(packed), in some derives on the theory that Rust could cause fields to overlap as an optimization. This text promises never to do that, so we can probably permit repr(packed) in some cases.