https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66337

            Bug ID: 66337
           Summary: __alignof__(s.d) incorrect for a double member with
                    -malign-power
           Product: gcc
           Version: 5.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

As mentioned in http://gcc.gnu.org/ml/gcc-patches/2015-05/msg02145.html, the
result of __alignof__(s.d) where s.d is a struct member of type double doesn't
reflect the POWER ABI requirements on such members when the -malign-power
option is specified and differs from the result returned by IBM xlc on AIX with
the equivalent option.

I searched the GCC test suite for tests exercising the option to see if I was
missing something but couldn't find any.  I also searched the sources to see I
could find a comment explaining the difference.  All I was able to find was the
following in config/rs6000/{freebsd64,linux64}.h:

/* PowerPC64 Linux word-aligns FP doubles when -malign-power is given.  */

which still doesn't explain the result.

Test case run with gcc 4.8 and IBM xlc 12.1 on AIX 7.1 (GCC's result is the
same on Linux/POWER).

If the result is expected, I'm happy to update the documentation provided
someone can point me to the ABI document that outlines the requirements.

$ cat t.c && gcc -malign-power t.c && ./a.out && xlc -qalign=power t.c &&
./a.out
#include <stdio.h>

static struct { double d; } sd;

int main (void) {
    printf ("%zu %zu\n", __alignof (sd), __alignof__ (sd.d));
    return 0;
}
8 4
8 8

Reply via email to