From 6a7bb556eeabcde46999dbb0e5228456272efc6d Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Thu, 2 May 2024 00:10:21 +0200 Subject: [PATCH] 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. --- ChangeLog | 9 +++++++++ lib/stddef.in.h | 17 ++++++++++++++--- m4/stddef_h.m4 | 4 +++- modules/stddef | 5 +++-- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3801e5811e..89e709c323 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2024-05-01 Bruno Haible + + 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 nullptr: work around GCC 14 nullptr sentinel bug diff --git a/lib/stddef.in.h b/lib/stddef.in.h index 6c05fbfe28..649cb9ca9b 100644 --- a/lib/stddef.in.h +++ b/lib/stddef.in.h @@ -27,9 +27,13 @@ #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. \ + . */ \ + && !@STDDEF_NOT_IDEMPOTENT@ /* Special invocation convention inside gcc header files. In particular, gcc provides a version of that blindly redefines NULL even when __need_wint_t was defined, even though @@ -52,6 +56,13 @@ # 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 diff --git a/m4/stddef_h.m4 b/m4/stddef_h.m4 index ee94128e19..a150509206 100644 --- a/m4/stddef_h.m4 +++ b/m4/stddef_h.m4 @@ -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]) diff --git a/modules/stddef b/modules/stddef index 4096ab955d..9a80db007b 100644 --- a/modules/stddef +++ b/modules/stddef @@ -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 -- 2.39.5