On 23/03/2021 08.45, Oliver Hartkopp wrote: > IMO we facing a compiler problem here - and we should be very happy that > the BUILD_BUG_ON() triggered an issue after years of silence. > > I do not have a good feeling about what kind of strange effects this > compiler issue might have in other code of other projects. > > So I would explicitly suggest NOT to change the af_can.c code to work > around this compiler issue. > > Let the gcc people fix their product and let them thank all of us for > detecting it. I'm sure you'd be eligible for a full refund in case this was a bug in gcc. It is not. It's a pretty clear ABI requirement for (at least some flavors of) ARM: https://stackoverflow.com/questions/43786747/struct-layout-in-apcs-gnu-abi and more directly from the horse's mouth: https://developer.arm.com/documentation/dui0067/d/arm-compiler-reference/c-and-c---implementation-details/structures--unions--enumerations--and-bitfields Field alignment Structures are arranged with the first-named component at the lowest address. Fields are aligned as follows: A field with a char type is aligned to the next available byte. A field with a short type is aligned to the next even-addressed byte. Bitfield alignment depends on how the bitfield is declared. See Bitfields in packed structures for more information. All other types are aligned on word boundaries. That anonymous union falls into the "All other types" bullet. __packed is the documented and standard way to overrule the compiler's/ABI's layout decisions. Rasmus