]> git.saurik.com Git - bison.git/commitdiff
Fix precedence for end token.
authorJoel E. Denny <jdenny@clemson.edu>
Mon, 2 May 2011 01:53:35 +0000 (21:53 -0400)
committerJoel E. Denny <jdenny@clemson.edu>
Mon, 2 May 2011 03:13:13 +0000 (23:13 -0400)
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 9d6af153184eea964fef7f87d76a60fe29f715b5)

ChangeLog
NEWS
src/symtab.c
tests/regression.at

index 77641bd579d3843f39453dd0d5cb6db47fc14f06..595f782d8e3875244a496ced3b0e1272d12d1262 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2011-05-01  Joel E. Denny  <joeldenny@joeldenny.org>
+
+       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.
+
 2011-05-01  Joel E. Denny  <joeldenny@joeldenny.org>
 
        Pacify -DGNULIB_POSIXCHECK.
 2011-05-01  Joel E. Denny  <joeldenny@joeldenny.org>
 
        Pacify -DGNULIB_POSIXCHECK.
diff --git a/NEWS b/NEWS
index 989e6b8b234db8748a5fc5a46b9a9958eb11c90d..3b2251216add41ca1d8655877767a932491541a0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -402,6 +402,16 @@ Bison News
 
     bison -Wnone gram.y
 
 
     bison -Wnone gram.y
 
+** Precedence directives can now assign token number 0:
+
+  Since Bison 2.3b, which restored the ability of precedence
+  directives to assign token numbers, doing so for token number 0 has
+  produced an assertion failure.  For example:
+
+    %left END 0
+
+  This bug has been fixed.
+
 * Changes in version 2.4.3 (2010-08-05):
 
 ** Bison now obeys -Werror and --warnings=error for warnings about
 * Changes in version 2.4.3 (2010-08-05):
 
 ** Bison now obeys -Werror and --warnings=error for warnings about
index 87a9618e4bea64401033bb6adbc06fe94d1d903c..d22743f18252ff50a12f81d7487b99802ec23e91 100644 (file)
@@ -403,10 +403,11 @@ symbol_user_token_number_set (symbol *sym, int user_token_number, location loc)
   if (user_token_number == 0)
     {
       endtoken = sym;
   if (user_token_number == 0)
     {
       endtoken = sym;
-      endtoken->number = 0;
       /* It is always mapped to 0, so it was already counted in
         NTOKENS.  */
       /* It is always mapped to 0, so it was already counted in
         NTOKENS.  */
-      --ntokens;
+      if (endtoken->number != NUMBER_UNDEFINED)
+        --ntokens;
+      endtoken->number = 0;
     }
 }
 
     }
 }
 
index 5e0ead0316b3da954e0ca09dc54cba46a195c832..b4470d54c87d7b31d816104d560c96a3f4f06fa9 100644 (file)
@@ -1196,12 +1196,15 @@ AT_DATA_GRAMMAR([input.y],
 %}
 
 %error-verbose
 %}
 
 %error-verbose
+%right END 0
 %left TK1 1 TK2 2 "tok alias" 3
 
 %%
 
 %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"
 sr_conflict:
   TK2
   | TK2 "tok alias"
@@ -1231,7 +1234,8 @@ main (void)
 ]])
 
 AT_BISON_CHECK([[-o input.c input.y]], [[0]],,
 ]])
 
 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]])
 ]])
 AT_COMPILE([[input]])
 AT_PARSER_CHECK([[./input]])