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 ab61c40bfa)
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
This commit is contained in:
Peter Eisentraut 2024-08-02 09:59:35 +02:00
parent 63bef4df97
commit 9fb855fe1a
8 changed files with 13 additions and 3 deletions

View File

@ -11,13 +11,15 @@
#include "utils/float.h" #include "utils/float.h"
#include "varatt.h" #include "varatt.h"
/* All grammar constructs return strings */
#define YYSTYPE char *
#include "cubeparse.h"
/* silence -Wmissing-variable-declarations */ /* silence -Wmissing-variable-declarations */
extern int cube_yychar; extern int cube_yychar;
extern int cube_yynerrs; extern int cube_yynerrs;
/* All grammar constructs return strings */
#define YYSTYPE char *
/* /*
* Bison doesn't allocate anything that needs to live across parser calls, * 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 * so we can easily have it use palloc instead of malloc. This prevents

View File

@ -12,6 +12,7 @@
#include "utils/float.h" #include "utils/float.h"
#include "segdata.h" #include "segdata.h"
#include "segparse.h"
/* silence -Wmissing-variable-declarations */ /* silence -Wmissing-variable-declarations */
extern int seg_yychar; extern int seg_yychar;

View File

@ -32,6 +32,7 @@
#include "nodes/makefuncs.h" #include "nodes/makefuncs.h"
#include "utils/memutils.h" #include "utils/memutils.h"
#include "bootparse.h"
/* silence -Wmissing-variable-declarations */ /* silence -Wmissing-variable-declarations */
extern int boot_yychar; extern int boot_yychar;

View File

@ -22,6 +22,7 @@
#include "replication/walsender.h" #include "replication/walsender.h"
#include "replication/walsender_private.h" #include "replication/walsender_private.h"
#include "repl_gram.h"
/* silence -Wmissing-variable-declarations */ /* silence -Wmissing-variable-declarations */
extern int replication_yychar; extern int replication_yychar;

View File

@ -17,6 +17,8 @@
#include "nodes/pg_list.h" #include "nodes/pg_list.h"
#include "replication/syncrep.h" #include "replication/syncrep.h"
#include "syncrep_gram.h"
/* Result of parsing is returned in one of these two variables */ /* Result of parsing is returned in one of these two variables */
SyncRepConfigData *syncrep_parse_result; SyncRepConfigData *syncrep_parse_result;
char *syncrep_parse_error_msg; char *syncrep_parse_error_msg;

View File

@ -5,6 +5,7 @@
#include "postgres_fe.h" #include "postgres_fe.h"
#include "preproc_extern.h" #include "preproc_extern.h"
#include "preproc.h"
#include "ecpg_config.h" #include "ecpg_config.h"
#include <unistd.h> #include <unistd.h>

View File

@ -26,6 +26,7 @@
#include "plpgsql.h" #include "plpgsql.h"
#include "pl_gram.h"
/* silence -Wmissing-variable-declarations */ /* silence -Wmissing-variable-declarations */
extern int plpgsql_yychar; extern int plpgsql_yychar;

View File

@ -13,6 +13,7 @@
#include "postgres_fe.h" #include "postgres_fe.h"
#include "isolationtester.h" #include "isolationtester.h"
#include "specparse.h"
/* silence -Wmissing-variable-declarations */ /* silence -Wmissing-variable-declarations */
extern int spec_yychar; extern int spec_yychar;