mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 20:33:03 +00:00
reader: reject rules on YYEOF
We crashed when rules were given on YYEOF. Reported by Han Zheng. Fixes https://github.com/akimd/bison/issues/92. * src/reader.c (check_and_convert_grammar): Make sure YYEOF is not an nterm. * tests/input.at (Rule for YYEOF): New.
This commit is contained in:
@@ -954,6 +954,10 @@ check_and_convert_grammar (void)
|
|||||||
if (!eoftoken)
|
if (!eoftoken)
|
||||||
{
|
{
|
||||||
eoftoken = symbol_get ("YYEOF", empty_loc);
|
eoftoken = symbol_get ("YYEOF", empty_loc);
|
||||||
|
if (eoftoken->content->class == nterm_sym)
|
||||||
|
complain (&eoftoken->location, complaint,
|
||||||
|
_("rule given for %s, which is a token"),
|
||||||
|
eoftoken->tag);
|
||||||
eoftoken->content->class = token_sym;
|
eoftoken->content->class = token_sym;
|
||||||
eoftoken->content->number = 0;
|
eoftoken->content->number = 0;
|
||||||
/* Value specified by POSIX. */
|
/* Value specified by POSIX. */
|
||||||
|
|||||||
@@ -1888,6 +1888,38 @@ input.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wothe
|
|||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
|
|
||||||
|
## ---------------- ##
|
||||||
|
## Rule for YYEOF. ##
|
||||||
|
## ---------------- ##
|
||||||
|
|
||||||
|
AT_SETUP([Rule for YYEOF])
|
||||||
|
|
||||||
|
# We crashed when rules were given on YYEOF.
|
||||||
|
# https://github.com/akimd/bison/issues/92.
|
||||||
|
|
||||||
|
AT_DATA([input1.y],
|
||||||
|
[[%%
|
||||||
|
start: YYEOF;
|
||||||
|
YYEOF: 'x';
|
||||||
|
]])
|
||||||
|
|
||||||
|
AT_BISON_CHECK([input1.y], [1], [],
|
||||||
|
[[input1.y:3.1-5: error: rule given for YYEOF, which is a token
|
||||||
|
]])
|
||||||
|
|
||||||
|
# This is ok, YYEOF is not special.
|
||||||
|
AT_DATA([input2.y],
|
||||||
|
[[%token MYEOF 0
|
||||||
|
%%
|
||||||
|
start: YYEOF;
|
||||||
|
YYEOF: 'x';
|
||||||
|
]])
|
||||||
|
|
||||||
|
AT_BISON_CHECK([input2.y])
|
||||||
|
|
||||||
|
AT_CLEANUP
|
||||||
|
|
||||||
|
|
||||||
## --------------------- ##
|
## --------------------- ##
|
||||||
## %prec takes a token. ##
|
## %prec takes a token. ##
|
||||||
## --------------------- ##
|
## --------------------- ##
|
||||||
|
|||||||
Reference in New Issue
Block a user