]> git.saurik.com Git - bison.git/commitdiff
src/tables.c (matching_state): Don't allow states to match if
authorPaul Hilfinger <Hilfinger@CS.Berkeley.EDU>
Wed, 6 Nov 2002 02:46:08 +0000 (02:46 +0000)
committerPaul Hilfinger <Hilfinger@CS.Berkeley.EDU>
Wed, 6 Nov 2002 02:46:08 +0000 (02:46 +0000)
either has GLR conflict entries.
ChangeLog: update for this and Hilfinger's preceding test-suite addition.

ChangeLog
src/tables.c

index d3ff5695f9e4a49b6c7045a1535190178ea9683b..a211e961e7a9e8329f058b89d1fbccaca25dfc2c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2002-11-04  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+       * src/tables.c (matching_state): Don't allow states to match if 
+       either has GLR conflict entries.
+       
 2002-11-05  Paul Eggert  <eggert@twinsun.com>
 
        Scan <% and %> digraphs in C code as POSIX 1003.1-2001 requires.
        * src/system.h: Don't use #ifdef/#ifndef on HAVE_ values, only
        #if.
 
+2002-10-29  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
+
+       * tests/glr-regr1.at: New test for reported regressions.
+       * tests/testsuite.at: Add glr-regr1.at test.
+       * tests/Makefile.am: Add glr-regr1.at test.
+       
 2002-10-24  Paul Eggert  <eggert@twinsun.com>
 
        Version 1.75a.
index 333e789cce44c1a9871b3159e9433dec39a05785..84afd1cd2a138a33b96c78af55bb4789a8d6f5b4 100644 (file)
@@ -610,6 +610,15 @@ matching_state (vector_number_t vector)
   t = tally[i];
   w = width[i];
 
+  /* If VECTOR has GLR conflicts, return -1 */
+  if (conflict_tos[i] != NULL)
+    {
+      int j;
+      for (j = 0; j < t; j += 1)
+       if (conflict_tos[i][j] != 0)
+         return -1;
+    }
+
   for (prev = vector - 1; prev >= 0; prev--)
     {
       vector_number_t j = order[prev];
@@ -622,7 +631,8 @@ matching_state (vector_number_t vector)
        return -1;
 
       for (k = 0; match && k < t; k++)
-       if (tos[j][k] != tos[i][k] || froms[j][k] != froms[i][k])
+       if (tos[j][k] != tos[i][k] || froms[j][k] != froms[i][k]
+           || (conflict_tos[j] != NULL && conflict_tos[j][k] != 0))
          match = 0;
 
       if (match)