https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119950

            Bug ID: 119950
           Summary: __builtin_constant_p warning with
                    -Wdeprecated-non-prototype inconsistent
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: quentin at armitage dot org.uk
  Target Milestone: ---

The following code (in /tmp/wc.c) compiles without error:
#define __USE_EXTERN_INLINES
#include <wchar.h>

when compiled with gcc -Wdeprecated-non-prototypes -c -o /tmp/wc.{o,c}

However, if I copy /usr/include/wchar.h to /tmp and change /tmp/wc.c to be:
#define __USE_EXTERN_INLINES
#include </tmp/wchar.h>

compiling now gives the following errors:

In file included from /tmp/wc.c:2:
/tmp/wchar.h: In function ‘btowc’:
/tmp/wchar.h:344:11: warning: ISO C23 does not allow arguments for function
‘__builtin_constant_p’ declared without parameters [-Wdeprecated-non-prototype]
  344 | { return (__builtin_constant_p (__c) && __c >= '\0' && __c <= '\x7f'
      |           ^~~~~~~~~~~~~~~~~~~~
/tmp/wchar.h: In function ‘wctob’:
/tmp/wchar.h:350:11: warning: ISO C23 does not allow arguments for function
‘__builtin_constant_p’ declared without parameters [-Wdeprecated-non-prototype]
  350 | { return (__builtin_constant_p (__wc) && __wc >= L'\0' && __wc <=
L'\x7f'
      |           ^~~~~~~~~~~~~~~~~~~~

The above in itself is clearly not the problem itself, but the problem comes
from including the glib2 headers (from
https://download.gnome.org/sources/glib/2.84/glib-2.84.1.tar.xz) which use
__builtin_constant_p.

Compiling:
#include <gio/gio.h>

with -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include
-Wdeprecated-non-prototype generates the following errors:

In file included from /usr/include/glib-2.0/glib/gstring.h:37,
                 from /usr/include/glib-2.0/glib/giochannel.h:36,
                 from /usr/include/glib-2.0/glib.h:56,
                 from /usr/include/glib-2.0/gobject/gbinding.h:30,
                 from /usr/include/glib-2.0/glib-object.h:24,
                 from /usr/include/glib-2.0/gio/gioenums.h:30,
                 from /usr/include/glib-2.0/gio/giotypes.h:30,
                 from /usr/include/glib-2.0/gio/gio.h:28,
                 from /tmp/gl.c:1:
/usr/include/glib-2.0/glib/gstrfuncs.h: In function ‘g_strdup_inline’:
/usr/include/glib-2.0/glib/gstrfuncs.h:311:7: warning: ISO C23 does not allow
arguments for function ‘__builtin_constant_p’ declared without parameters
[-Wdeprecated-non-prototype]
  311 |   if (__builtin_constant_p (!str) && !str)
      |       ^~~~~~~~~~~~~~~~~~~~
/usr/include/glib-2.0/glib/gstrfuncs.h:314:7: warning: ISO C23 does not allow
arguments for function ‘__builtin_constant_p’ declared without parameters
[-Wdeprecated-non-prototype]
  314 |   if (__builtin_constant_p (!!str) && !!str && __builtin_constant_p
(strlen (str)))
      |       ^~~~~~~~~~~~~~~~~~~~
/usr/include/glib-2.0/glib/gstrfuncs.h:314:48: warning: ISO C23 does not allow
arguments for function ‘__builtin_constant_p’ declared without parameters
[-Wdeprecated-non-prototype]
  314 |   if (__builtin_constant_p (!!str) && !!str && __builtin_constant_p
(strlen (str)))
      |                                                ^~~~~~~~~~~~~~~~~~~~
/usr/include/glib-2.0/glib/glib-autocleanups.h: In function
‘g_autoptr_cleanup_gstring_free’:
/usr/include/glib-2.0/glib/gstring.h:72:4: warning: ISO C23 does not allow
arguments for function ‘__builtin_constant_p’ declared without parameters
[-Wdeprecated-non-prototype]
   72 |   (__builtin_constant_p (free_segment) ?        \
      |    ^~~~~~~~~~~~~~~~~~~~
/usr/include/glib-2.0/glib/glib-autocleanups.h:39:5: note: in expansion of
macro ‘g_string_free’
   39 |     g_string_free (string, TRUE);

Reply via email to