bug-gnulib
[Top][All Lists]
Advanced

[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])],



reply via email to

[Prev in Thread] Current Thread [Next in Thread]