summaryrefslogtreecommitdiff
path: root/lib/stddef.in.h
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2021-01-03 13:38:03 +0100
committerBruno Haible <bruno@clisp.org>2021-01-03 13:56:59 +0100
commit8f8078d797e919f4f351969c8744fc6f34f49f69 (patch)
tree0f1d17660c7a3673eb68864436da820410319cf0 /lib/stddef.in.h
parent5d1dafd8346fda4e268bcf1747dc97925d1ab576 (diff)
downloadgnulib-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.h17
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@