On Wed, 6 Aug 2025, Jakub Jelinek wrote: > Hi! > > OpenBSD headers apparently instead of just > #define SIZE_MAX something > do > #ifndef SIZE_MAX > #define SIZE_MAX something > #endif > This causes problem with gengtype-lex.cc, where the flex generated > code has > #ifndef SIZE_MAX > #define SIZE_MAX (~(size_t)0) > #endif > and system.h is included only after that and since my changes for > host size_t *printf printing SIZE_MAX is used in preprocessor > expressions, > #if SIZE_MAX <= UINT_MAX > etc. > In the preprocessor, identifiers are replaced with 0 and so > it is (~(0)0) <= 0xffffffffU > or so and thus invalid. > > Now, normally we want to include system.h early, ideally immediately > after config.h or bconfig.h, but in gengtype-lex.cc case we have > #ifdef HOST_GENERATOR_FILE > #include "config.h" > #define GENERATOR_FILE 1 > #else > #include "bconfig.h" > #endif > > // flex generated start of file, including > #include <stdio.h> > #include <string.h> > #include <errno.h> > #include <stdlib.h> > #include <inttypes.h> > #ifndef SIZE_MAX > #define SIZE_MAX (~(size_t)0) > #endif > > // start of gengtype-lex.l %{} section > #ifdef HOST_GENERATOR_FILE > #include "config.h" > #define GENERATOR_FILE 1 > #else > #include "bconfig.h" > #endif > #include "system.h" > > #define malloc xmalloc > #define realloc xrealloc > > #include "gengtype.h" > > As I'm not sure what flex we require for building gcc (%top{} which COBOL FE > *.l uses is only in flex from 2003-04-01), the patch keeps using the %top{} > done by hand in Makefile.in, but includes system.h in the top part, with > FLEX_SCANNER temporarily defined (I'm undefining it afterwards because > flex generated code defines it again and I don't want to guarantee it is > defined to the same value) so that malloc/realloc poisoning doesn't happen > and #define malloc xmalloc and realloc xrealloc are done in system.h. > Note, system.h already includes all the 5 headers flex generated code > includes. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
OK. Richard. > 2025-08-06 Jakub Jelinek <ja...@redhat.com> > > PR bootstrap/121386 > * Makefile.in (gengtype-lex.cc): Append #define FLEX_SCANNER, > #include "system.h" and #undef FLEX_SCANNER to the prepended lines. > * gengtype-lex.l: Remove inclusion of config.h or bconfig.h, system.h > and definition of malloc/realloc from %{} section. > > --- gcc/Makefile.in.jj 2025-07-30 13:40:57.287535441 +0200 > +++ gcc/Makefile.in 2025-08-05 11:32:48.036425630 +0200 > @@ -3402,6 +3402,9 @@ gengtype-lex.cc : gengtype-lex.l > echo '#else' >> $@.tmp; \ > echo '#include "bconfig.h"' >> $@.tmp; \ > echo '#endif' >> $@.tmp; \ > + echo '#define FLEX_SCANNER' >> $@.tmp; \ > + echo '#include "system.h"' >> $@.tmp; \ > + echo '#undef FLEX_SCANNER' >> $@.tmp; \ > cat $@ >> $@.tmp; \ > mv $@.tmp $@; \ > } > --- gcc/gengtype-lex.l.jj 2025-08-04 14:24:43.961182699 +0200 > +++ gcc/gengtype-lex.l 2025-08-05 11:33:20.234994359 +0200 > @@ -21,17 +21,6 @@ along with GCC; see the file COPYING3. > %option noinput > > %{ > -#ifdef HOST_GENERATOR_FILE > -#include "config.h" > -#define GENERATOR_FILE 1 > -#else > -#include "bconfig.h" > -#endif > -#include "system.h" > - > -#define malloc xmalloc > -#define realloc xrealloc > - > #include "gengtype.h" > > #define YY_DECL int yylex (const char **yylval) > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)