AT_BANNER([[Conflicts.]])
-
-## ------------------------ ##
-## Token declaration order. ##
-## ------------------------ ##
+## ------------------------- ##
+## Token declaration order. ##
+## ------------------------- ##
# This test checks that token are declared left to right when in a precedence
# statement.
assert (T < U);
assert (U < V);
assert (V < W);
+ return 0;
}
]])
-AT_FULL_COMPILE([input])
+AT_BISON_CHECK([-o input.c input.y])
+AT_COMPILE([input])
-AT_CHECK([./input])
+AT_PARSER_CHECK([./input])
AT_BISON_OPTION_POPDEFS
AT_CLEANUP
+## ------------------------------- ##
+## Useless associativity warning. ##
+## ------------------------------- ##
+
+AT_SETUP([Useless associativity warning])
+
+AT_DATA([[input.y]],
+[[%nonassoc "="
+%left "+"
+%left "*"
+%precedence "("
+%%
+stmt:
+ exp
+| "var" "=" exp
+;
+
+exp:
+ exp "+" exp
+| exp "*" "num"
+| "(" exp ")"
+| "num"
+;
+]])
+
+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]
+]])
+
+AT_CLEANUP
+
+
+## ---------------------------- ##
+## Useless precedence warning. ##
+## ---------------------------- ##
+
+AT_SETUP([Useless precedence warning])
+
+AT_DATA([[input.y]],
+[[%token A B
+%precedence Z
+%left X
+%precedence Y
+%left W
+%right V
+%nonassoc U
+%%
+a: b
+ | a U b
+ | f
+;
+b: c
+ | b V c
+;
+c: d
+ | c W d
+;
+d: A
+ | d X d
+ | d Y A
+;
+f: B
+ | f Z B
+;
+]])
+
+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]
+ %nonassoc U
+ ^
+]])
+
+AT_CLEANUP
+
+
## ---------------- ##
## S/R in initial. ##
## ---------------- ##
;
]])
-AT_BISON_CHECK([-o input.c input.y], 0, [],
+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]
]])
AT_CLEANUP