Paul Eggert <egg...@cs.ucla.edu> writes: > * m4/nullptr.m4 (gl_NULLPTR): Work around GCC bug 114780. > --- > ChangeLog | 3 +++ > doc/gnulib.texi | 4 ++++ > m4/nullptr.m4 | 18 ++++++++++++++++-- > 3 files changed, 23 insertions(+), 2 deletions(-) > > diff --git a/ChangeLog b/ChangeLog > index b30238f934..e341b62968 100644 > --- a/ChangeLog > +++ b/ChangeLog > @@ -1,5 +1,8 @@ > 2024-04-27 Paul Eggert <egg...@cs.ucla.edu> > > + nullptr: work around GCC 14 nullptr sentinel bug > + * m4/nullptr.m4 (gl_NULLPTR): Work around GCC bug 114780. > + > stddef: work around GCC 14 stddef.h bugs > * lib/stddef.in.h: Do nothing if _@GUARD_PREFIX@_STDDEF_H is > defined, as stddef.h has already been included. This works > diff --git a/doc/gnulib.texi b/doc/gnulib.texi > index ac8c01d1e1..aa0eb57f62 100644 > --- a/doc/gnulib.texi > +++ b/doc/gnulib.texi > @@ -978,6 +978,10 @@ Portability problems fixed by Gnulib: > Some platforms lack @code{nullptr}: > For C: GCC 12, Clang 15, and other pre-2023 C compilers. > For C++: pre-2011 C++ compilers. > + > +@item > +Some platforms incorrectly warn when @code{nullptr} is a sentinel argument: > +GCC 13.2 and 14.0.
This is perhaps a bit confusing, even if technically correct. It'll be fixed in the final release (GCC 14.1), as Jakub fixed it on 2024-04-23. GCC X.0 will never be released and refers to a development version (just like GCC X.Y.1). Someone might read this and wrongly think that "GCC 14" is broken. I'd just omit 14 here. > @end itemize > > Portability problems not fixed by Gnulib: > diff --git a/m4/nullptr.m4 b/m4/nullptr.m4 > index eeeee99495..4f2284296a 100644 > --- a/m4/nullptr.m4 > +++ b/m4/nullptr.m4 > @@ -1,5 +1,5 @@ > # nullptr.m4 > -# serial 1 > +# serial 2 > dnl Copyright 2023-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, > @@ -14,7 +14,21 @@ AC_DEFUN([gl_NULLPTR], > AC_CACHE_CHECK([for C nullptr], [gl_cv_c_nullptr], > [AC_COMPILE_IFELSE( > [AC_LANG_SOURCE([[int *p = nullptr;]])], > - [gl_cv_c_nullptr=yes], > + [gl_cv_c_nullptr=yes > + # Work around > <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114780>. > + gl_saved_CFLAGS=$CFLAGS > + CFLAGS="$CFLAGS -Wall -Werror" > + AC_COMPILE_IFELSE( > + [AC_LANG_PROGRAM( > + [[void f (char const *, ...) __attribute__ ((sentinel));]], > + [[f ("", nullptr);]])], > + [], > + [AC_COMPILE_IFELSE( > + [AC_LANG_PROGRAM( > + [[void f (char const *, ...) __attribute__ > ((sentinel));]], > + [[f ("", (void *) 0);]])], > + [gl_cv_c_nullptr='not as a sentinel'])]) > + CFLAGS=$gl_saved_CFLAGS], > [gl_cv_c_nullptr=no])]) > gl_c_nullptr=$gl_cv_c_nullptr > AC_LANG_POP([C])],