https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92287
Segher Boessenkool <segher at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |segher at gcc dot gnu.org --- Comment #6 from Segher Boessenkool <segher at gcc dot gnu.org> --- (In reply to Bill Schmidt from comment #5) > For the 32-bit ELF ABI, all structs (regardless of size) are passed using a > pointer allowing for call-by-value semantics. This is the source of ZSTs > requiring a register. So it's clear there is an ABI that requires this > behavior. (Look for the Parameter Passing Register Selection Algorithm in > https://github.com/ryanarn/powerabi/blob/master/chap3-elf32abi.sgml.) > > The 64-bit ABIs (both ELF V1 and ELF V2) pass structures in registers, and > the parameter passing algorithms won't assign registers for size-0 > aggregates. This is intentional. Yup. And everything is identical between LE and BE on all these ABIs. Note that the situation for zero-sized structs isn't very clear in most ABIs, these included. You must have an unusual program if this ever matters ;-)