mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +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.7-d831b. */
|
/* A Bison parser, made by GNU Bison 3.7.4.6-89d2b-dirty. */
|
||||||
|
|
||||||
/* Bison implementation for Yacc-like parsers in C
|
/* Bison implementation for Yacc-like parsers in C
|
||||||
|
|
||||||
@@ -45,11 +45,11 @@
|
|||||||
define necessary library symbols; they are noted "INFRINGES ON
|
define necessary library symbols; they are noted "INFRINGES ON
|
||||||
USER NAME SPACE" below. */
|
USER NAME SPACE" below. */
|
||||||
|
|
||||||
/* Identify Bison output. */
|
/* Identify Bison output, and Bison version. */
|
||||||
#define YYBISON 30703
|
#define YYBISON 30704
|
||||||
|
|
||||||
/* Bison version. */
|
/* Bison version string. */
|
||||||
#define YYBISON_VERSION "3.7.3.7-d831b"
|
#define YYBISON_VERSION "3.7.4.6-89d2b-dirty"
|
||||||
|
|
||||||
/* Skeleton name. */
|
/* Skeleton name. */
|
||||||
#define YYSKELETON_NAME "yacc.c"
|
#define YYSKELETON_NAME "yacc.c"
|
||||||
@@ -365,6 +365,18 @@ typedef int_least16_t yytype_int16;
|
|||||||
typedef short yytype_int16;
|
typedef short yytype_int16;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Work around bug in HP-UX 11.23, which defines these macros
|
||||||
|
incorrectly for preprocessor constants. This workaround can likely
|
||||||
|
be removed in 2023, as HPE has promised support for HP-UX 11.23
|
||||||
|
(aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
|
||||||
|
<https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
|
||||||
|
#ifdef __hpux
|
||||||
|
# undef UINT_LEAST8_MAX
|
||||||
|
# undef UINT_LEAST16_MAX
|
||||||
|
# define UINT_LEAST8_MAX 255
|
||||||
|
# define UINT_LEAST16_MAX 65535
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
|
#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
|
||||||
typedef __UINT_LEAST8_TYPE__ yytype_uint8;
|
typedef __UINT_LEAST8_TYPE__ yytype_uint8;
|
||||||
#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
|
#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
|
||||||
@@ -791,9 +803,9 @@ static const yytype_int16 yypgoto[] =
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* YYDEFGOTO[NTERM-NUM]. */
|
/* YYDEFGOTO[NTERM-NUM]. */
|
||||||
static const yytype_int16 yydefgoto[] =
|
static const yytype_uint8 yydefgoto[] =
|
||||||
{
|
{
|
||||||
-1, 1, 2, 43, 82, 115, 77, 45, 84, 46,
|
0, 1, 2, 43, 82, 115, 77, 45, 84, 46,
|
||||||
50, 49, 47, 156, 120, 121, 122, 97, 93, 94,
|
50, 49, 47, 156, 120, 121, 122, 97, 93, 94,
|
||||||
95, 128, 141, 87, 88, 89, 55, 56, 78, 79,
|
95, 128, 141, 87, 88, 89, 55, 56, 78, 79,
|
||||||
80, 135, 144, 145, 113, 63, 106, 57, 81, 58,
|
80, 135, 144, 145, 113, 63, 106, 57, 81, 58,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
/* A Bison parser, made by GNU Bison 3.7.3.7-d831b. */
|
/* A Bison parser, made by GNU Bison 3.7.4.6-89d2b-dirty. */
|
||||||
|
|
||||||
/* Bison interface for Yacc-like parsers in C
|
/* 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 begin = goto_map[sym - ntokens];
|
||||||
const goto_number end = goto_map[sym - ntokens + 1];
|
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)
|
if (begin != end)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -737,7 +737,7 @@ static const yytype_int8 yypgoto[] =
|
|||||||
};
|
};
|
||||||
static const yytype_int8 yydefgoto[] =
|
static const yytype_int8 yydefgoto[] =
|
||||||
{
|
{
|
||||||
-1, 2, 3, 4, 8
|
0, 2, 3, 4, 8
|
||||||
};
|
};
|
||||||
static const yytype_int8 yytable[] =
|
static const yytype_int8 yytable[] =
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user