]> Savannah Git Hosting - gnulib.git/commitdiff
stddef: A better workaround against GCC bug 114870.
authorBruno Haible <bruno@clisp.org>
Wed, 1 May 2024 22:10:21 +0000 (00:10 +0200)
committerBruno Haible <bruno@clisp.org>
Fri, 17 May 2024 23:21:59 +0000 (01:21 +0200)
* lib/stddef.in.h: If STDDEF_NOT_IDEMPOTENT is 1, disable the special
invocation convention.
* m4/stddef_h.m4 (gl_STDDEF_H): Set STDDEF_NOT_IDEMPOTENT.
(gl_STDDEF_H_DEFAULTS): Initialize STDDEF_NOT_IDEMPOTENT.
* modules/stddef (Makefile.am): Substitute STDDEF_NOT_IDEMPOTENT.

ChangeLog
lib/stddef.in.h
m4/stddef_h.m4
modules/stddef

index 3801e5811ed68f360758d232add87bfb4da334c8..89e709c32341393d81b8f349d5d0661a07271015 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2024-05-01  Bruno Haible  <bruno@clisp.org>
+
+       stddef: A better workaround against GCC bug 114870.
+       * lib/stddef.in.h: If STDDEF_NOT_IDEMPOTENT is 1, disable the special
+       invocation convention.
+       * m4/stddef_h.m4 (gl_STDDEF_H): Set STDDEF_NOT_IDEMPOTENT.
+       (gl_STDDEF_H_DEFAULTS): Initialize STDDEF_NOT_IDEMPOTENT.
+       * modules/stddef (Makefile.am): Substitute STDDEF_NOT_IDEMPOTENT.
+
 2024-04-27  Paul Eggert  <eggert@cs.ucla.edu>
 
        nullptr: work around GCC 14 nullptr sentinel bug
index 6c05fbfe2835c8169ca84c9b906064422de21e23..649cb9ca9b01f6a8a9cb8baff75c2c56580a22ce 100644 (file)
 #endif
 @PRAGMA_COLUMNS@
 
-#if defined __need_wchar_t || defined __need_size_t  \
-  || defined __need_ptrdiff_t || defined __need_NULL \
-  || defined __need_wint_t
+#if (defined __need_wchar_t || defined __need_size_t                \
+     || defined __need_ptrdiff_t || defined __need_NULL             \
+     || defined __need_wint_t)                                      \
+    /* Avoid warning triggered by "gcc -std=gnu23 -Wsystem-headers" \
+       in Fedora 40 with gcc 14.0.1.                                \
+       <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114870>.  */   \
+    && !@STDDEF_NOT_IDEMPOTENT@
 /* Special invocation convention inside gcc header files.  In
    particular, gcc provides a version of <stddef.h> that blindly
    redefines NULL even when __need_wint_t was defined, even though
 # endif
 
 #else
+/* For @STDDEF_NOT_IDEMPOTENT@.  */
+# undef __need_wchar_t
+# undef __need_size_t
+# undef __need_ptrdiff_t
+# undef __need_NULL
+# undef __need_wint_t
+
 /* Normal invocation convention.  */
 
 # ifndef _@GUARD_PREFIX@_STDDEF_H
index ee94128e199c8ca0b9bc477605f0c1a6826d15b8..a15050920676d99bf0e791562802260866f850c9 100644 (file)
@@ -1,4 +1,4 @@
-# stddef_h.m4 serial 15
+# stddef_h.m4 serial 16
 dnl Copyright (C) 2009-2024 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -109,6 +109,7 @@ AC_DEFUN_ONCE([gl_STDDEF_H],
         [gl_cv_clean_version_stddef=yes],
         [gl_cv_clean_version_stddef=no])])
   if test "$gl_cv_clean_version_stddef" = no; then
+    STDDEF_NOT_IDEMPOTENT=1
     GL_GENERATE_STDDEF_H=true
   fi
 
@@ -143,6 +144,7 @@ AC_DEFUN([gl_STDDEF_H_DEFAULTS],
 [
   dnl Assume proper GNU behavior unless another module says otherwise.
   NULLPTR_T_NEEDS_STDDEF=1;      AC_SUBST([NULLPTR_T_NEEDS_STDDEF])
+  STDDEF_NOT_IDEMPOTENT=0;       AC_SUBST([STDDEF_NOT_IDEMPOTENT])
   REPLACE_NULL=0;                AC_SUBST([REPLACE_NULL])
   HAVE_MAX_ALIGN_T=1;            AC_SUBST([HAVE_MAX_ALIGN_T])
   HAVE_WCHAR_T=1;                AC_SUBST([HAVE_WCHAR_T])
index 4096ab955d4b0a98ae9e3e4f0f169bcb97d08fde..9a80db007bf5fa0c5184c68c16ce67ba6ad4f62f 100644 (file)
@@ -31,10 +31,11 @@ stddef.h: stddef.in.h $(top_builddir)/config.status
              -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
              -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
              -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
-             -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
-             -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
              -e 's|@''NULLPTR_T_NEEDS_STDDEF''@|$(NULLPTR_T_NEEDS_STDDEF)|g' \
+             -e 's|@''STDDEF_NOT_IDEMPOTENT''@|$(STDDEF_NOT_IDEMPOTENT)|g' \
              -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+             -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
+             -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
              $(srcdir)/stddef.in.h > $@-t
        $(AM_V_at)mv $@-t $@
 else