[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 2/2] nullptr: work around GCC 14 nullptr sentinel bug
From: |
Sam James |
Subject: |
Re: [PATCH 2/2] nullptr: work around GCC 14 nullptr sentinel bug |
Date: |
Sat, 27 Apr 2024 23:17:51 +0100 |
User-agent: |
mu4e 1.12.4; emacs 30.0.50 |
Paul Eggert <eggert@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 <eggert@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])],