%expect-rr is for GLR only
authorAkim Demaille <akim@lrde.epita.fr>
Fri, 21 Sep 2012 13:19:12 +0000 (15:19 +0200)
committerAkim Demaille <akim@lrde.epita.fr>
Fri, 21 Sep 2012 13:29:24 +0000 (15:29 +0200)
* src/conflicts.c (conflicts_print): Complain about %expect-rr if not
in GLR mode, regardless of the number of reduce/reduce conflicts.
* tests/conflicts.at (%expect-rr non GLR): New test.
* NEWS: Update.

NEWS
src/conflicts.c
tests/conflicts.at

diff --git a/NEWS b/NEWS
index f6e6a8c..9cabf05 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -145,6 +145,11 @@ GNU Bison NEWS
   the programmer to prune possible parses based on the values of run-time
   expressions.
 
+** The directive %expect-rr is now an error in non GLR mode
+
+  It used to be an error only if used in non GLR mode, _and_ if there are
+  reduce/reduce conflicts.
+
 * Noteworthy changes in release ?.? (????-??-??) [?]
 
 
index 989dfc2..0db0f57 100644 (file)
@@ -576,7 +576,7 @@ conflicts_print (void)
         }
   }
 
-  if (! glr_parser && rrc_total > 0 && expected_rr_conflicts != -1)
+  if (! glr_parser && expected_rr_conflicts != -1)
     {
       complain (Wother, _("%%expect-rr applies only to GLR parsers"));
       expected_rr_conflicts = -1;
index c4515e8..169509f 100644 (file)
@@ -1459,9 +1459,40 @@ state 1
 AT_CLEANUP
 
 
-## --------------------------------- ##
-## -W versus %expect and %expect-rr  ##
-## --------------------------------- ##
+## -------------------- ##
+## %expect-rr non GLR.  ##
+## -------------------- ##
+
+AT_SETUP([[%expect-rr non GLR]])
+
+AT_DATA([[1.y]],
+[[%expect-rr 0
+%%
+exp: 'a'
+]])
+
+AT_BISON_CHECK([[1.y]], [[0]], [],
+[[1.y: warning: %expect-rr applies only to GLR parsers [-Wother]
+]])
+
+AT_DATA([[2.y]],
+[[%expect-rr 1
+%%
+exp: 'a' | 'a';
+]])
+
+AT_BISON_CHECK([[2.y]], [[0]], [],
+[[2.y: warning: %expect-rr applies only to GLR parsers [-Wother]
+2.y: conflicts: 1 reduce/reduce
+2.y:3.12-14: warning: rule useless in parser due to conflicts: exp: 'a' [-Wother]
+]])
+
+AT_CLEANUP
+
+
+## ---------------------------------- ##
+## -W versus %expect and %expect-rr.  ##
+## ---------------------------------- ##
 
 AT_SETUP([[-W versus %expect and %expect-rr]])