Greetings!  I'm wondering if you might confirm that current master
builds with just the same -std=gnu17 in CFLAGS?  Debian is moving to
gcc-15 too but the compiler is not yet installable in any chroot.

Take care,

Jerry James <loganje...@gmail.com> writes:

> Greetings,
>
> The Fedora project is rebuilding all packages with a prerelease of GCC
> 15.  This version of GCC changes the default C standard from C17 to
> C23.  Two C23 changes have been causing a lot of build failures, and
> also affect gcl.
>
> First, "bool", "true", and "false" are now keywords of the language;
> i.e., "#include <stdbool.h>" has become a no-op.  One consequence is
> that this code in h/lu.h is now illegal:
>
> #undef bool
> typedef int bool;
>
> Since bool is a language keyword, not a preprocessor macro, the #undef
> has no effect, and you can't create a typedef for a builtin type, so
> that is a compiler error.  (There is another such typedef in
> bin/dpp.c.)
>
> Second, in C17 and earlier, function declarations of the form "t f();"
> mean that f is a function that returns type t and has an unspecified
> parameter list.  In C23, such a declaration has the same meaning as "t
> f(void);"; i.e., it asserts that f takes zero arguments.  This leads
> to build errors like this:
>
> In file included from ../h/include.h:119,
>                  from typespec.c:29:
> ../h/../h/protoize.h:64:41: error: conflicting types for
> ‘clear_compiler_properties’; have ‘union lispunion *(union lispunion
> *, union lispunion *)’
>    64 | /* assignment.c:547:OF */ extern object
> clear_compiler_properties (object sym, object code); /* (sym, code)
> object sym; object code; */
>       |                                         ^~~~~~~~~~~~~~~~~~~~~~~~~
> In file included from ../h/include.h:112:
> ../h/../h/object.h:532:8: note: previous declaration of
> ‘clear_compiler_properties’ with type ‘union lispunion *(void)’
>   532 | object clear_compiler_properties();
>       |        ^~~~~~~~~~~~~~~~~~~~~~~~~
>
> I attempted to work around the issue for now by adding -std=gnu17 to
> the build flags, but that still fails:
>
> ../bin/dpp.c:84:13: error: ‘bool’ cannot be defined via ‘typedef’
>    84 | typedef int bool;
>       |             ^~~~
> ../bin/dpp.c:84:13: note: ‘bool’ is a keyword with ‘-std=c23’ onwards
> ../bin/dpp.c:84:1: warning: useless type name in empty declaration
>    84 | typedef int bool;
>       | ^~~~~~~
>
> The problem is that the C compiler is invoked without user CFLAGS in 3
> places, each time defaulting to C23 mode.  The attached patch, plus
> explicitly specifying the C standard as C17 or earlier, works around
> the issue.
> --
> Jerry James
> http://www.jamezone.org/
>
>

-- 
Camm Maguire                                        c...@maguirefamily.org
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah

Reply via email to