[Bug target/102024] [12 Regression] zero width bitfields and ABIs

xry111 at mengyan1223 dot wang gcc-bugzilla@gcc.gnu.org
Wed Mar 30 19:02:07 GMT 2022


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.


More information about the Gcc-bugs mailing list