add max_align_t definition for C11 and C++11
authorRich Felker <dalias@aerifal.cx>
Wed, 20 Aug 2014 21:20:14 +0000 (17:20 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 20 Aug 2014 21:20:14 +0000 (17:20 -0400)
commit321f4fa9067185aa6bb47403dfba46e8cfe917d3
tree99ccc4b3b101b6becae777a80cb28f065cba317d
parent4992ace94232a116bdca25481ccc3d6841b83432
add max_align_t definition for C11 and C++11

unfortunately this needs to be able to vary by arch, because of a huge
mess GCC made: the GCC definition, which became the ABI, depends on
quirks in GCC's definition of __alignof__, which does not match the
formal alignment of the type.

GCC's __alignof__ unexpectedly exposes the an implementation detail,
its "preferred alignment" for the type, rather than the formal/ABI
alignment of the type, which it only actually uses in structures. on
most archs the two values are the same, but on some (at least i386)
the preferred alignment is greater than the ABI alignment.

I considered using _Alignas(8) unconditionally, but on at least one
arch (or1k), the alignment of max_align_t with GCC's definition is
only 4 (even the "preferred alignment" for these types is only 4).
arch/arm/bits/alltypes.h.in
arch/i386/bits/alltypes.h.in
arch/microblaze/bits/alltypes.h.in
arch/mips/bits/alltypes.h.in
arch/or1k/bits/alltypes.h.in
arch/powerpc/bits/alltypes.h.in
arch/sh/bits/alltypes.h.in
arch/x32/bits/alltypes.h.in
arch/x86_64/bits/alltypes.h.in
include/stddef.h