https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102024
--- Comment #30 from Xi Ruoyao <xry111 at mengyan1223 dot wang> --- (In reply to Jakub Jelinek from comment #28) > Also, what does LLVM do? clang-14 agree with gcc-12 on the return values, as we expected (the ABI documentation is clear enough). But clang-14 treats arguments differently: struct foo { int : 0; double a; int : 0; double b; int : 0; }; extern void func(struct foo); void pass_foo(void) { struct foo test; test.a = 114; test.b = 514; func(test); } It puts "a" into $f12 and "b" into $f13. So the behavior of clang-14 and clang++-14 handling arguments with zero-width bit-fields is same as g++-11, and different from g++-12, gcc-11, and gcc-12. I'm not sure if we should keep our current behavior, or change it to match LLVM.