# Exercising Bison on conflicts. -*- Autotest -*-
-# Copyright (C) 2002-2005, 2007-2013 Free Software Foundation, Inc.
+# Copyright (C) 2002-2005, 2007-2015 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
AT_SETUP([Useless associativity warning])
AT_DATA([[input.y]],
-[[%nonassoc "="
+[[%token EQ "=" PL "+" ST "*" LP "("
+%nonassoc "="
%left "+"
%left "*"
%precedence "("
]])
AT_BISON_CHECK([-Wprecedence input.y], 0, [],
-[[input.y:1.11-13: warning: useless precedence and associativity for "=" [-Wprecedence]
-input.y:3.7-9: warning: useless associativity for "*", use %precedence [-Wprecedence]
-input.y:4.13-15: warning: useless precedence for "(" [-Wprecedence]
+[[input.y:2.1-9: warning: useless precedence and associativity for "=" [-Wprecedence]
+input.y:4.1-5: warning: useless associativity for "*", use %precedence [-Wprecedence]
+input.y:5.1-11: warning: useless precedence for "(" [-Wprecedence]
]])
AT_CLEANUP
AT_SETUP([Useless precedence warning])
AT_DATA([[input.y]],
-[[%token A B
+[[%token A B U V W X Y Z
%precedence Z
%left X
%precedence Y
]])
AT_BISON_CHECK([-Wprecedence -fcaret -o input.c input.y], 0, [],
-[[input.y:2.13: warning: useless precedence for Z [-Wprecedence]
- %precedence Z
- ^
-input.y:5.7: warning: useless precedence and associativity for W [-Wprecedence]
- %left W
- ^
-input.y:6.8: warning: useless precedence and associativity for V [-Wprecedence]
- %right V
- ^
-input.y:7.11: warning: useless precedence and associativity for U [-Wprecedence]
+[[input.y:7.1-9: warning: useless precedence and associativity for U [-Wprecedence]
%nonassoc U
- ^
+ ^^^^^^^^^
+input.y:6.1-6: warning: useless precedence and associativity for V [-Wprecedence]
+ %right V
+ ^^^^^^
+input.y:5.1-5: warning: useless precedence and associativity for W [-Wprecedence]
+ %left W
+ ^^^^^
+input.y:2.1-11: warning: useless precedence for Z [-Wprecedence]
+ %precedence Z
+ ^^^^^^^^^^^
]])
AT_CLEANUP
## parse.error=verbose and consistent errors. ##
## ------------------------------------------- ##
-AT_SETUP([[parse.error=verbose and consistent errors]])
-
m4_pushdef([AT_CONSISTENT_ERRORS_CHECK], [
+AT_SETUP([[parse.error=verbose and consistent errors: ]$1])
+
AT_BISON_OPTION_PUSHDEFS([$1])
m4_pushdef([AT_YYLEX_PROTOTYPE],
m4_popdef([AT_YYLEX_PROTOTYPE])
AT_BISON_OPTION_POPDEFS
-])
+AT_CLEANUP
+]) dnl AT_CONSISTENT_ERRORS_CHECK
+
+
+
m4_pushdef([AT_PREVIOUS_STATE_GRAMMAR],
[[%nonassoc 'a';
m4_popdef([AT_CONSISTENT_ERRORS_CHECK])
-AT_CLEANUP
AT_BISON_CHECK([-Wall -o input.c input.y], 0, [],
[[input.y: warning: 4 shift/reduce conflicts [-Wconflicts-sr]
-input.y:1.7-9: warning: useless precedence and associativity for '+' [-Wprecedence]
-input.y:2.7-9: warning: useless precedence and associativity for '*' [-Wprecedence]
+input.y:1.1-5: warning: useless precedence and associativity for '+' [-Wprecedence]
+input.y:2.1-5: warning: useless precedence and associativity for '*' [-Wprecedence]
]])
AT_CLEANUP
0 $accept: . start $end
1 start: . resolved_conflict 'a' reported_conflicts 'a'
2 resolved_conflict: . 'a' unreachable1
- 3 | . ['a']
+ 3 | . %empty ['a']
$default reduce using rule 3 (resolved_conflict)
1 start: resolved_conflict 'a' . reported_conflicts 'a'
8 reported_conflicts: . 'a'
9 | . 'a'
- 10 | . ['a']
+ 10 | . %empty ['a']
'a' shift, and go to state 5
6 | . empty_c1 'c'
7 | . empty_c2 'c'
8 | . empty_c3 'c'
- 9 empty_a: . ['a']
- 10 empty_b: . []
- 11 empty_c1: . []
- 12 empty_c2: . []
- 13 empty_c3: . ['c']
+ 9 empty_a: . %empty ['a']
+ 10 empty_b: . %empty []
+ 11 empty_c1: . %empty []
+ 12 empty_c2: . %empty []
+ 13 empty_c3: . %empty ['c']
'b' shift, and go to state 1
6 | . empty_c1 'c'
7 | . empty_c2 'c'
8 | . empty_c3 'c'
- 9 empty_a: . []
- 10 empty_b: . []
- 11 empty_c1: . []
- 12 empty_c2: . ['c']
- 13 empty_c3: . ['c']
+ 9 empty_a: . %empty []
+ 10 empty_b: . %empty []
+ 11 empty_c1: . %empty []
+ 12 empty_c2: . %empty ['c']
+ 13 empty_c3: . %empty ['c']
'a' error (nonassociative)
'b' error (nonassociative)