X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/a32a2d57a5d931ad1e30d180f9d40b482b674593..297e263a0050959e0fd139ad66e71383fc9ac4db:/tests/input.at diff --git a/tests/input.at b/tests/input.at index 0ed8635f..356fe92b 100644 --- a/tests/input.at +++ b/tests/input.at @@ -69,10 +69,9 @@ AT_CLEANUP # _AT_UNUSED_VALUES_DECLARATIONS() -# -------------------------------------------- +# -------------------------------- # Generate the token, type, and destructor # declarations for the unused values tests. - m4_define([_AT_UNUSED_VALUES_DECLARATIONS], [[[%token INT; %type a b c d e f g h i j k l; @@ -80,15 +79,11 @@ m4_define([_AT_UNUSED_VALUES_DECLARATIONS], # AT_CHECK_UNUSED_VALUES(DECLARATIONS_AFTER, CHECK_MIDRULE_VALUES) -# ------------------------------------------------------------------ -# Generate a grammar to test unused values, -# compile it, run it. If DECLARATIONS_AFTER -# is set, then the token, type, and destructor -# declarations are generated after the rules -# rather than before. If CHECK_MIDRULE_VALUES -# is set, then --warnings=midrule-values is -# set. - +# ---------------------------------------------------------------- +# Generate a grammar to test unused values, compile it, run it. If +# DECLARATIONS_AFTER is set, then the token, type, and destructor +# declarations are generated after the rules rather than before. If +# CHECK_MIDRULE_VALUES is set, then --warnings=midrule-values is set. m4_define([AT_CHECK_UNUSED_VALUES], [AT_DATA([input.y], m4_ifval($1, [ @@ -274,6 +269,102 @@ input.y:12.10-24: %printer redeclaration for input.y:5.10-24: previous declaration ]]) +AT_CLEANUP + +## ----------------------------------------------------- ## +## Undeclared symbols used for a printer or destructor. ## +## ----------------------------------------------------- ## + +AT_SETUP([Undeclared symbols used for a printer or destructor]) + +AT_DATA([[input.y]], +[[%printer {} foo baz +%destructor {} bar + +%% +exp: bar; +]]) + +AT_BISON_CHECK([input.y], [1], [], +[[input.y:2.16-18: symbol bar is used, but is not defined as a token and has no rules +input.y:1.17-19: warning: symbol baz is used, but is not defined as a token and has no rules +input.y:1.13-15: warning: symbol foo is used, but is not defined as a token and has no rules +]]) + +AT_CLEANUP + + +## ----------------------------------------------------- ## +## Unassociated types used for a printer or destructor. ## +## ----------------------------------------------------- ## + +AT_SETUP([Unassociated types used for a printer or destructor]) + +AT_DATA([[input.y]], +[[%token tag1 +%type tag2 + +%printer { } +%destructor { } + +%% + +exp: tag1 { $1; } + | tag2 { $1; } + +tag2: "a" { $$; } +]]) + +AT_BISON_CHECK([input.y], [0], [], +[[input.y:4.22-28: warning: type is used, but is not associated to any symbol +input.y:5.25-31: warning: type is used, but is not associated to any symbol +]]) + +AT_CLEANUP + + +## --------------------------------- ## +## Useless printers or destructors. ## +## --------------------------------- ## + +AT_SETUP([Useless printers or destructors]) + +AT_DATA([[input.y]], +[[%token token1 +%token token2 +%token token3 +%token token4 +%token token51 token52 +%token token61 token62 +%token token7 + +%printer {} token1 +%destructor {} token2 +%printer {} token51 +%destructor {} token61 + +%printer {} token7 + +%printer {} +%destructor {} +%printer {} +%destructor {} + +%printer {} +%destructor {} + +%destructor {} + +%% +exp: "a"; +]]) + +AT_BISON_CHECK([input.y], [0], [], +[[input.y:16.13-19: warning: useless %printer for type +input.y:17.16-22: warning: useless %destructor for type +]]) + + AT_CLEANUP @@ -516,7 +607,7 @@ yylex (void) } ]]) -# Pacify Emacs' font-lock-mode: " +# Pacify Emacs'font-lock-mode: " AT_DATA([main.c], [[typedef int value; @@ -595,8 +686,8 @@ AT_CHECK_REQUIRE(100.0, 63) AT_SETUP([String aliases for character tokens]) -# Bison once thought a character token and its alias were different symbols -# with the same user token number. +# Bison once thought a character token and its alias were different +# symbols with the same user token number. AT_DATA_GRAMMAR([input.y], [[%token 'a' "a" @@ -720,10 +811,10 @@ AT_CLEANUP AT_SETUP([Unclosed constructs]) -# Bison's scan-gram.l once forgot to STRING_FINISH some unclosed constructs, so -# they were prepended to whatever it STRING_GROW'ed next. It also threw them -# away rather than returning them to the parser. The effect was confusing -# subsequent error messages. +# Bison's scan-gram.l once forgot to STRING_FINISH some unclosed +# constructs, so they were prepended to whatever it STRING_GROW'ed +# next. It also threw them away rather than returning them to the +# parser. The effect was confusing subsequent error messages. AT_DATA([input.y], [[%token A "a @@ -765,8 +856,8 @@ AT_CLEANUP AT_SETUP([%start after first rule]) -# Bison once complained that a %start after the first rule was a redeclaration -# of the start symbol. +# Bison once complained that a %start after the first rule was a +# redeclaration of the start symbol. AT_DATA([input.y], [[%% @@ -1083,6 +1174,17 @@ AT_BISON_CHECK([[input.y]], [1], [], [[input.y:1.9-34: invalid value for %define Boolean variable 'lr.keep-unreachable-states' ]]) +AT_DATA([[input.y]], +[[%define namespace "foo" +%define api.namespace "foo" +%% +start: ; +]]) +AT_BISON_CHECK([[input.y]], [1], [], +[[input.y:2.9-21: %define variable 'api.namespace' redefined +input.y:1.9-17: previous definition +]]) + AT_DATA([[input.y]], [[%define foo_bar "baz" %% @@ -1141,14 +1243,14 @@ m4_define([AT_CHECK_NAMESPACE_ERROR], AT_DATA([[input.y]], [[%language "C++" %defines -%define namespace "]$1[" +%define api.namespace "]$1[" %% start: ; ]]) AT_BISON_CHECK([[input.y]], [1], [], [m4_foreach([b4_arg], m4_dquote(m4_shift($@)), -[[input.y:3.9-17: ]b4_arg[ +[[input.y:3.9-21: ]b4_arg[ ]])]) ])