diff options
author | Bruno Haible <bruno@clisp.org> | 2021-01-03 13:38:03 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2021-01-03 13:56:59 +0100 |
commit | 8f8078d797e919f4f351969c8744fc6f34f49f69 (patch) | |
tree | 0f1d17660c7a3673eb68864436da820410319cf0 /lib/stddef.in.h | |
parent | 5d1dafd8346fda4e268bcf1747dc97925d1ab576 (diff) | |
download | gnulib-8f8078d797e919f4f351969c8744fc6f34f49f69.tar.gz |
stddef: Override wrong max_align_t on AIX 7 with xlc in 64-bit mode.
* m4/stddef_h.m4 (gl_STDDEF_H): Make check for good max_align_t
stricter: Add tests for offsetof-based alignof.
* lib/stddef.in.h (max_align_t): Override on AIX in 64-bit mode.
* doc/posix-headers/stddef.texi: Document the AIX max_align_t bug.
Diffstat (limited to 'lib/stddef.in.h')
-rw-r--r-- | lib/stddef.in.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/stddef.in.h b/lib/stddef.in.h index 6ef45af1d1..77147e9bcc 100644 --- a/lib/stddef.in.h +++ b/lib/stddef.in.h @@ -49,6 +49,23 @@ # ifndef _@GUARD_PREFIX@_STDDEF_H +/* On AIX 7.2, with xlc in 64-bit mode, <stddef.h> defines max_align_t to a + type with alignment 4, but 'long' has alignment 8. */ +# if defined _AIX && defined _ARCH_PPC64 +# if !GNULIB_defined_max_align_t +# ifdef _MAX_ALIGN_T +/* /usr/include/stddef.h has already defined max_align_t. Override it. */ +typedef long rpl_max_align_t; +# define max_align_t rpl_max_align_t +# else +/* Prevent /usr/include/stddef.h from defining max_align_t. */ +typedef long max_align_t; +# define _MAX_ALIGN_T +# endif +# define GNULIB_defined_max_align_t 1 +# endif +# endif + /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ |