https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102024
--- Comment #22 from Jakub Jelinek <jakub at gcc dot gnu.org> --- So, to sum up: aarch64, arm, x86-64 and riscv (last one since GCC 10 already) do ignore zero width bit-fields in argument/return value passing decisions and so have a C ABI incompatibility from earlier GCC versions. There is -Wpsabi diagnostics on affected argument/return value passing. powerpc64le and s390x do not ignore them, so have a C++ ABI incompatibility from earlier GCC versions. There is -Wpsabi diagnostics on affected argument/return value passing. alpha, arc, avr, bfin, bpf, c6x, cr16, cris, csky, epiphany, fr30, frv, ft32, gcn, h8300, i386 (32-bit), lm32, m32c, m32r, m68k, mcore, microblaze, mmix, mn10300, moxie, msp430, nds32, nios2, nvptx, or1k, pa, pdp11, powerpc (except for powerpc64le), pru, rl78, rx, sh, sparc, stormy16, tilegx, tilepro, v850, vax, visium and xtensa are not affected. ia64 and iq2000 are unknown. mips seems to be affected but nothing has been done about it, which means that right now if it is affected, it is not ignoring the zero width bit-fields without -Wpsabi diagnostics. Except for the not affected list and maybe unknown list, there was also an ABI change between G++ 4.4 and earlier and 4.5 and later.