https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69573
--- Comment #9 from Martin Sebor <msebor at gcc dot gnu.org> --- I built the x86_64-apple-darwin15.3.0 cross-compiler to better understand what the problem is but I don't see it. The cross compiler says the size and alignment of long double is 16 in both ILP32 (with -m32) and LP64. So the patched test should pass without any further changes. Can you let me know the target triple of your GCC and the result of _Alignof(long double)? Below is what I get: $ (set -x; cat t.c && for m in 32 64; do /build/sysroot/x86_64-apple-darwin15.3.0/bin/x86_64-apple-darwin15.3.0-gcc -S -Wall -m$m -o/dev/stdout -std=c11 t.c; done) + cat t.c int alignof_long_double = _Alignof (long double); long double ld = 1; + for m in 32 64 + /build/sysroot/x86_64-apple-darwin15.3.0/bin/x86_64-apple-darwin15.3.0-gcc -S -Wall -m32 -o/dev/stdout -std=c11 t.c .globl _alignof_long_double .data .align 2 _alignof_long_double: .long 16 <<< _Alignof(long double) in -m64 .globl _ld .align 4 <<< alignment of ld (2^4 bytes) _ld: .long 0 .long 2147483648 .long 16383 .long 0 .subsections_via_symbols + for m in 32 64 + /build/sysroot/x86_64-apple-darwin15.3.0/bin/x86_64-apple-darwin15.3.0-gcc -S -Wall -m64 -o/dev/stdout -std=c11 t.c .globl _alignof_long_double .data .align 2 _alignof_long_double: .long 16 <<< _Alignof(long double) with -m64 .globl _ld .align 4 <<< alignment of ld (2^4 bytes) _ld: .long 0 .long 2147483648 .long 16383 .long 0 .subsections_via_symbols