]> Savannah Git Hosting - gnulib.git/commitdiff
stddef: Avoid conflict with system-defined max_align_t.
authorBruno Haible <bruno@clisp.org>
Fri, 8 Sep 2017 08:02:47 +0000 (10:02 +0200)
committerBruno Haible <bruno@clisp.org>
Fri, 8 Sep 2017 08:02:47 +0000 (10:02 +0200)
The configure-determined HAVE_MAX_ALIGN_T may not always be accurate.
Reported by Werner Lemberg <wl@gnu.org> in
<https://lists.gnu.org/archive/html/bug-gnulib/2017-08/msg00185.html>.

* lib/stddef.in.h (rpl_max_align_t): Renamed from max_align_t.
(max_align_t): Define as a macro.
(GNULIB_defined_max_align_t): New macro. Guards against multiple
definitions of rpl_max_align_t in different copies of gnulib-generated
<stddef.h>.

ChangeLog
lib/stddef.in.h

index 63eb16db07a1fb58367726dc75f2c2c78e70317c..68d320501954ce09c48b95305a5890bc7f0675aa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2017-09-08  Bruno Haible  <bruno@clisp.org>
+
+       stddef: Avoid conflict with system-defined max_align_t.
+       The configure-determined HAVE_MAX_ALIGN_T may not always be accurate.
+       Reported by Werner Lemberg <wl@gnu.org> in
+       <https://lists.gnu.org/archive/html/bug-gnulib/2017-08/msg00185.html>.
+       * lib/stddef.in.h (rpl_max_align_t): Renamed from max_align_t.
+       (max_align_t): Define as a macro.
+       (GNULIB_defined_max_align_t): New macro. Guards against multiple
+       definitions of rpl_max_align_t in different copies of gnulib-generated
+       <stddef.h>.
+
 2017-09-05  Paul Eggert  <eggert@cs.ucla.edu>
 
        libc-config: port to MSVC
index 2a11d2b71de867bdc57e68a12dd8bffd35e07fcb..a79f5363df4a3827b9c98cd5ef6071af67f22142 100644 (file)
    a hack in case the configure-time test was done with g++ even though
    we are currently compiling with gcc.  */
 #if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T)
+# if !GNULIB_defined_max_align_t
 /* On the x86, the maximum storage alignment of double, long, etc. is 4,
    but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8,
    and the C11 standard allows this.  Work around this problem by
    using __alignof__ (which returns 8 for double) rather than _Alignof
    (which returns 4), and align each union member accordingly.  */
-# ifdef __GNUC__
-#  define _GL_STDDEF_ALIGNAS(type) \
-     __attribute__ ((__aligned__ (__alignof__ (type))))
-# else
-#  define _GL_STDDEF_ALIGNAS(type) /* */
-# endif
+#  ifdef __GNUC__
+#   define _GL_STDDEF_ALIGNAS(type) \
+      __attribute__ ((__aligned__ (__alignof__ (type))))
+#  else
+#   define _GL_STDDEF_ALIGNAS(type) /* */
+#  endif
 typedef union
 {
   char *__p _GL_STDDEF_ALIGNAS (char *);
   double __d _GL_STDDEF_ALIGNAS (double);
   long double __ld _GL_STDDEF_ALIGNAS (long double);
   long int __i _GL_STDDEF_ALIGNAS (long int);
-} max_align_t;
+} rpl_max_align_t;
+#  define max_align_t rpl_max_align_t
+#  define GNULIB_defined_max_align_t 1
+# endif
 #endif
 
 #  endif /* _@GUARD_PREFIX@_STDDEF_H */