Fix precedence for end token.

Since Bison 2.3b, which restored the ability of precedence
directives to assign user token numbers, doing so for user token
number 0 has produced an assertion failure.
* NEWS (2.5): Document fix.
* src/symtab.c (symbol_user_token_number_set): In the case of the
end token, don't decrement ntokens if it was never incremented.
* tests/regression.at (Token number in precedence declaration):
Extend.
(cherry picked from commit 9d6af15318)
This commit is contained in:
Joel E. Denny
2011-05-01 21:53:35 -04:00
parent ba60c39547
commit 1f36f54446
4 changed files with 32 additions and 5 deletions

View File

@@ -1196,12 +1196,15 @@ AT_DATA_GRAMMAR([input.y],
%}
%error-verbose
%right END 0
%left TK1 1 TK2 2 "tok alias" 3
%%
start: TK1 sr_conflict "tok alias" ;
start:
TK1 sr_conflict "tok alias"
| start %prec END
;
sr_conflict:
TK2
| TK2 "tok alias"
@@ -1231,7 +1234,8 @@ main (void)
]])
AT_BISON_CHECK([[-o input.c input.y]], [[0]],,
[[input.y:24.5-19: warning: rule useless in parser due to conflicts: sr_conflict: TK2 "tok alias"
[[input.y:23.5-19: warning: rule useless in parser due to conflicts: start: start
input.y:27.5-19: warning: rule useless in parser due to conflicts: sr_conflict: TK2 "tok alias"
]])
AT_COMPILE([[input]])
AT_PARSER_CHECK([[./input]])