mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 20:33:03 +00:00
tables: avoid warnings and save bits
The yydefgoto table uses -1 as an invalid for an impossible case (we never use yydefgoto[0], since it corresponds to the reduction to $accept, which never happens). Since yydefgoto is a table of state numbers, this -1 forces a signed type uselessly, which (1) might trigger compiler warnings when storing a value from yydefgoto into a state number (nonnegative), and (2) wastes bits which might result in using a int16 where a uint8 suffices. Reported by Jot Dot <jotdot@shaw.ca>. https://lists.gnu.org/r/bug-bison/2020-11/msg00027.html * src/tables.c (default_goto): Use 0 rather than -1 as invalid value. * tests/regression.at: Adjust.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* A Bison parser, made by GNU Bison 3.7.3.118-d0ea7-dirty. */
|
||||
/* A Bison parser, made by GNU Bison 3.7.4.133-f40c-dirty. */
|
||||
|
||||
/* Bison implementation for Yacc-like parsers in C
|
||||
|
||||
@@ -46,10 +46,10 @@
|
||||
USER NAME SPACE" below. */
|
||||
|
||||
/* Identify Bison output, and Bison version. */
|
||||
#define YYBISON 30703
|
||||
#define YYBISON 30704
|
||||
|
||||
/* Bison version string. */
|
||||
#define YYBISON_VERSION "3.7.3.118-d0ea7-dirty"
|
||||
#define YYBISON_VERSION "3.7.4.133-f40c-dirty"
|
||||
|
||||
/* Skeleton name. */
|
||||
#define YYSKELETON_NAME "yacc.c"
|
||||
@@ -799,9 +799,9 @@ static const yytype_int16 yypgoto[] =
|
||||
};
|
||||
|
||||
/* YYDEFGOTO[NTERM-NUM]. */
|
||||
static const yytype_int16 yydefgoto[] =
|
||||
static const yytype_uint8 yydefgoto[] =
|
||||
{
|
||||
-1, 1, 2, 43, 81, 115, 76, 45, 83, 46,
|
||||
0, 1, 2, 43, 81, 115, 76, 45, 83, 46,
|
||||
50, 49, 51, 47, 60, 158, 120, 121, 122, 96,
|
||||
92, 93, 94, 128, 142, 86, 87, 88, 99, 70,
|
||||
77, 78, 79, 136, 146, 147, 113, 55, 105, 71,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* A Bison parser, made by GNU Bison 3.7.3.118-d0ea7-dirty. */
|
||||
/* A Bison parser, made by GNU Bison 3.7.4.133-f40c-dirty. */
|
||||
|
||||
/* Bison interface for Yacc-like parsers in C
|
||||
|
||||
|
||||
@@ -512,7 +512,14 @@ default_goto (symbol_number sym, size_t state_count[])
|
||||
{
|
||||
const goto_number begin = goto_map[sym - ntokens];
|
||||
const goto_number end = goto_map[sym - ntokens + 1];
|
||||
state_number res = -1;
|
||||
|
||||
/* In the case this symbol is never reduced to ($accept), use state
|
||||
0. We used to use -1, but as a result the yydefgoto table must
|
||||
be signed, which (1) might trigger compiler warnings when storing
|
||||
a value from yydefgoto into a state number (nonnegative), and (2)
|
||||
wastes bits which might result in using a int16 where a uint8
|
||||
suffices. */
|
||||
state_number res = 0;
|
||||
|
||||
if (begin != end)
|
||||
{
|
||||
|
||||
@@ -737,7 +737,7 @@ static const yytype_int8 yypgoto[] =
|
||||
};
|
||||
static const yytype_int8 yydefgoto[] =
|
||||
{
|
||||
-1, 2, 3, 4, 8
|
||||
0, 2, 3, 4, 8
|
||||
};
|
||||
static const yytype_int8 yytable[] =
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user