From 9fb855fe1ae04a147bd4cdaa571a1c9de5f03682 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 2 Aug 2024 09:59:35 +0200 Subject: [PATCH] Include bison header files into implementation files Before Bison 3.4, the generated parser implementation files run afoul of -Wmissing-variable-declarations (in spite of commit ab61c40bfa2) because declarations for yylval and possibly yylloc are missing. The generated header files contain an extern declaration, but the implementation files don't include the header files. Since Bison 3.4, the generated implementation files automatically include the generated header files, so then it works. To make this work with older Bison versions as well, include the generated header file from the .y file. (With older Bison versions, the generated implementation file contains effectively a copy of the header file pasted in, so including the header file is redundant. But we know this works anyway because the core grammar uses this arrangement already.) Discussion: https://www.postgresql.org/message-id/flat/e0a62134-83da-4ba4-8cdb-ceb0111c95ce@eisentraut.org --- contrib/cube/cubeparse.y | 8 +++++--- contrib/seg/segparse.y | 1 + src/backend/bootstrap/bootparse.y | 1 + src/backend/replication/repl_gram.y | 1 + src/backend/replication/syncrep_gram.y | 2 ++ src/interfaces/ecpg/preproc/ecpg.header | 1 + src/pl/plpgsql/src/pl_gram.y | 1 + src/test/isolation/specparse.y | 1 + 8 files changed, 13 insertions(+), 3 deletions(-) diff --git a/contrib/cube/cubeparse.y b/contrib/cube/cubeparse.y index fd56d0e162..52622875cb 100644 --- a/contrib/cube/cubeparse.y +++ b/contrib/cube/cubeparse.y @@ -11,13 +11,15 @@ #include "utils/float.h" #include "varatt.h" +/* All grammar constructs return strings */ +#define YYSTYPE char * + +#include "cubeparse.h" + /* silence -Wmissing-variable-declarations */ extern int cube_yychar; extern int cube_yynerrs; -/* All grammar constructs return strings */ -#define YYSTYPE char * - /* * Bison doesn't allocate anything that needs to live across parser calls, * so we can easily have it use palloc instead of malloc. This prevents diff --git a/contrib/seg/segparse.y b/contrib/seg/segparse.y index 9635c3af6e..3e4aa31cad 100644 --- a/contrib/seg/segparse.y +++ b/contrib/seg/segparse.y @@ -12,6 +12,7 @@ #include "utils/float.h" #include "segdata.h" +#include "segparse.h" /* silence -Wmissing-variable-declarations */ extern int seg_yychar; diff --git a/src/backend/bootstrap/bootparse.y b/src/backend/bootstrap/bootparse.y index 58e0878dc8..73a7592fb7 100644 --- a/src/backend/bootstrap/bootparse.y +++ b/src/backend/bootstrap/bootparse.y @@ -32,6 +32,7 @@ #include "nodes/makefuncs.h" #include "utils/memutils.h" +#include "bootparse.h" /* silence -Wmissing-variable-declarations */ extern int boot_yychar; diff --git a/src/backend/replication/repl_gram.y b/src/backend/replication/repl_gram.y index c46ca39526..06daa95481 100644 --- a/src/backend/replication/repl_gram.y +++ b/src/backend/replication/repl_gram.y @@ -22,6 +22,7 @@ #include "replication/walsender.h" #include "replication/walsender_private.h" +#include "repl_gram.h" /* silence -Wmissing-variable-declarations */ extern int replication_yychar; diff --git a/src/backend/replication/syncrep_gram.y b/src/backend/replication/syncrep_gram.y index 5ce4f1bfe7..e4d9962226 100644 --- a/src/backend/replication/syncrep_gram.y +++ b/src/backend/replication/syncrep_gram.y @@ -17,6 +17,8 @@ #include "nodes/pg_list.h" #include "replication/syncrep.h" +#include "syncrep_gram.h" + /* Result of parsing is returned in one of these two variables */ SyncRepConfigData *syncrep_parse_result; char *syncrep_parse_error_msg; diff --git a/src/interfaces/ecpg/preproc/ecpg.header b/src/interfaces/ecpg/preproc/ecpg.header index 571b92f643..3790a601d1 100644 --- a/src/interfaces/ecpg/preproc/ecpg.header +++ b/src/interfaces/ecpg/preproc/ecpg.header @@ -5,6 +5,7 @@ #include "postgres_fe.h" #include "preproc_extern.h" +#include "preproc.h" #include "ecpg_config.h" #include diff --git a/src/pl/plpgsql/src/pl_gram.y b/src/pl/plpgsql/src/pl_gram.y index 0671ff7872..8182ce28aa 100644 --- a/src/pl/plpgsql/src/pl_gram.y +++ b/src/pl/plpgsql/src/pl_gram.y @@ -26,6 +26,7 @@ #include "plpgsql.h" +#include "pl_gram.h" /* silence -Wmissing-variable-declarations */ extern int plpgsql_yychar; diff --git a/src/test/isolation/specparse.y b/src/test/isolation/specparse.y index 282a750455..788069d1ba 100644 --- a/src/test/isolation/specparse.y +++ b/src/test/isolation/specparse.y @@ -13,6 +13,7 @@ #include "postgres_fe.h" #include "isolationtester.h" +#include "specparse.h" /* silence -Wmissing-variable-declarations */ extern int spec_yychar;