aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2025-08-06 11:27:00 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2025-08-06 11:27:00 +0200
commit4f2cd5a88838ce0af9f4d6425c55e702e44ae8d2 (patch)
tree56a764e603e116fbc64f2ca32661e7d56c901a71
parentde2eaf63ad4334bf0c8fcd0eafd94812a28004b3 (diff)
downloadgcc-4f2cd5a88838ce0af9f4d6425c55e702e44ae8d2.zip
gcc-4f2cd5a88838ce0af9f4d6425c55e702e44ae8d2.tar.gz
gcc-4f2cd5a88838ce0af9f4d6425c55e702e44ae8d2.tar.bz2
gengtype: Include system.h earlier in gengtype-lex.cc [PR121386]
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. 2025-08-06 Jakub Jelinek <jakub@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.
-rw-r--r--gcc/Makefile.in3
-rw-r--r--gcc/gengtype-lex.l11
2 files changed, 3 insertions, 11 deletions
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index d7d5cbe..3406517 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -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 $@; \
}
diff --git a/gcc/gengtype-lex.l b/gcc/gengtype-lex.l
index e36ca5b..37e4eb0 100644
--- a/gcc/gengtype-lex.l
+++ b/gcc/gengtype-lex.l
@@ -21,17 +21,6 @@ along with GCC; see the file COPYING3. If not see
%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)