From: Theophile Ranquet Date: Mon, 3 Dec 2012 10:12:07 +0000 (+0100) Subject: tests: enhance existing tests with carets X-Git-Tag: v2.6.90~15 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/505ece51710209eb4aba50166f8f7ddc57d0562b tests: enhance existing tests with carets * tests/actions.at: Unset value. * tests/conflicts.at: Rule useless due to conflicts. * tests/input.at: Missing terminator, unexpected end of file, command line redefinition of variable. * tests/named-refs.at: Many errors. * tests/reduce.at: Useless nonterminals and rules. * tests/regression.at: Large token. --- diff --git a/tests/actions.at b/tests/actions.at index 5e897a2e..ba46fe36 100644 --- a/tests/actions.at +++ b/tests/actions.at @@ -1304,6 +1304,15 @@ AT_BISON_CHECK([-o input.c input.y], 0,, input.y:30.3-35.37: warning: unused value: $3 ]]) +AT_BISON_CHECK([-fcaret -o input.c input.y], 0,, +[[input.y:33.3-23: warning: unset value: $$ + { @$ = 4; } // Only used. + ^^^^^^^^^^^^^^^^^^^^^ +input.y:30.3-35.37: warning: unused value: $3 + { @$ = 1; } // Not set or used. + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +]]) + AT_COMPILE([input]) AT_PARSER_CHECK([./input], 1,, [[Starting parse diff --git a/tests/conflicts.at b/tests/conflicts.at index a13d7546..5653b481 100644 --- a/tests/conflicts.at +++ b/tests/conflicts.at @@ -41,6 +41,12 @@ AT_BISON_CHECK([-o input.c input.y], 0, [], [[input.y:4.9: warning: rule useless in parser due to conflicts: e: /* empty */ ]]) +AT_BISON_CHECK([-fcaret -o input.c input.y], 0, [], +[[input.y:4.9: warning: rule useless in parser due to conflicts + e: 'e' | /* Nothing. */; + ^ +]]) + AT_CLEANUP diff --git a/tests/input.at b/tests/input.at index 474b7dd1..cd0dd6ac 100644 --- a/tests/input.at +++ b/tests/input.at @@ -813,6 +813,25 @@ input.y:19.13-20.0: error: missing '}' at end of file input.y:20.1: error: syntax error, unexpected end of file ]]) +AT_BISON_CHECK([-fcaret -o input.c input.y], 1, [], +[[input.y:1.10-2.0: error: missing '"' at end of line + %token A "a + ^^ +input.y:4.10-5.0: error: missing "'" at end of line + %token C '1 + ^^ +input.y:14.11-15.0: error: missing "'" at end of line + %type 'a + ^^ +input.y:16.11-17.0: error: missing '"' at end of line + %type "a + ^^ +input.y:19.13-20.0: error: missing '}' at end of file + %destructor { free ($$) + ^^^^^^^^^^^ +input.y:20.1: error: syntax error, unexpected end of file +]]) + AT_CLEANUP @@ -1045,6 +1064,18 @@ AT_BISON_CHECK([[-Dvar=cmd-d input-dg.y]], [[1]], [], :1: previous definition ]]) +AT_DATA([[input-dg.y]], +[[%define var "gram" +%% +start: ; +]]) +AT_BISON_CHECK([[-fcaret -Dvar=cmd-d input-dg.y]], [[1]], [], +[[input-dg.y:1.9-11: error: %define variable 'var' redefined + %define var "gram" + ^^^ +:2: previous definition +]]) + AT_DATA([[input-unused.y]], [[%% start: ; diff --git a/tests/named-refs.at b/tests/named-refs.at index de48e0f7..46b0159c 100644 --- a/tests/named-refs.at +++ b/tests/named-refs.at @@ -393,6 +393,127 @@ test.y:46.46-54: error: invalid reference: '$then-a.f' test.y:45.12-46.65: symbol not found in production: then test.y:45.41-46: possibly meant: $[then-a].f at $4 ]]) + +AT_BISON_CHECK([-fcaret -o test.c test.y], 1, [], +[[test.y:24.36-41: error: invalid reference: '$cond1' + { $if_stmt1 = new IfStmt($cond1, $then.f1, $else); }; + ^^^^^^ +test.y:23.11-24.62: symbol not found in production: cond1 + if_stmt1: IF expr[cond] THEN stmt[then] ELSE stmt.list[else] FI + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +test.y:26.43-53: error: invalid reference: '$stmt.field' + { $if_stmt2 = new IfStmt($cond, $stmt.field, 0); }; + ^^^^^^^^^^^ +test.y:25.11-26.60: symbol not found in production: stmt + if_stmt2: IF expr[cond] THEN stmt[then] FI + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +test.y:25.35-38: possibly meant: $then.field, hiding $stmt.field at $4 + if_stmt2: IF expr[cond] THEN stmt[then] FI + ^^^^ +test.y:28.43-52: error: invalid reference: '$stmt.list' + { $if_stmt3 = new IfStmt($cond, $stmt.list, 0); }; + ^^^^^^^^^^ +test.y:27.11-28.59: symbol not found in production: stmt + if_stmt3: IF expr[cond] THEN stmt.list FI + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +test.y:27.30-38: possibly meant: $[stmt.list] at $4 + if_stmt3: IF expr[cond] THEN stmt.list FI + ^^^^^^^^^ +test.y:30.43-46: error: ambiguous reference: '$xyz' + { $if_stmt4 = new IfStmt($cond, $xyz, $cond); }; + ^^^^ +test.y:29.35-37: refers to: $xyz at $4 + if_stmt4: IF expr[cond] THEN stmt[xyz] ELSE stmt[xyz] FI + ^^^ +test.y:29.50-52: refers to: $xyz at $6 + if_stmt4: IF expr[cond] THEN stmt[xyz] ELSE stmt[xyz] FI + ^^^ +test.y:32.43-52: error: invalid reference: '$stmt.list' + { $if_stmt5 = new IfStmt($cond, $stmt.list, $else); }; + ^^^^^^^^^^ +test.y:31.11-32.63: symbol not found in production: stmt + if_stmt5: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +test.y:31.40-43: possibly meant: $then, hiding $[stmt.list] at $4 + if_stmt5: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI + ^^^^ +test.y:31.61-64: possibly meant: $else, hiding $[stmt.list] at $6 + if_stmt5: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI + ^^^^ +test.y:34.43-58: error: invalid reference: '$stmt.list.field' + { $if_stmt6 = new IfStmt($cond, $stmt.list.field, $else); }; + ^^^^^^^^^^^^^^^^ +test.y:33.11-34.69: symbol not found in production: stmt + if_stmt6: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +test.y:33.40-43: possibly meant: $then.field, hiding $[stmt.list].field at $4 + if_stmt6: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI + ^^^^ +test.y:33.61-64: possibly meant: $else.field, hiding $[stmt.list].field at $6 + if_stmt6: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI + ^^^^ +test.y:36.43-54: error: invalid reference: '$[stmt.list]' + { $if_stmt7 = new IfStmt($cond, $[stmt.list].field, $else); }; + ^^^^^^^^^^^^ +test.y:35.11-36.71: symbol not found in production: stmt.list + if_stmt7: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +test.y:35.40-43: possibly meant: $then, hiding $[stmt.list] at $4 + if_stmt7: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI + ^^^^ +test.y:35.61-64: possibly meant: $else, hiding $[stmt.list] at $6 + if_stmt7: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI + ^^^^ +test.y:38.43-49: error: invalid reference: '$then.1' + { $if_stmt8 = new IfStmt($cond, $then.1, $else); }; + ^^^^^^^ +test.y:37.11-38.60: symbol not found in production: then + if_stmt8: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +test.y:37.40-45: possibly meant: $[then.1] at $4 + if_stmt8: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI + ^^^^^^ +test.y:40.43-55: error: invalid reference: '$then.1.field' + { $if_stmt9 = new IfStmt($cond, $then.1.field, $else); }; + ^^^^^^^^^^^^^ +test.y:39.11-40.66: symbol not found in production: then + if_stmt9: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +test.y:39.40-45: possibly meant: $[then.1].field at $4 + if_stmt9: IF expr[cond] THEN stmt.list[then.1] ELSE stmt.list[else] FI + ^^^^^^ +test.y:42.44-50: error: invalid reference: '$stmt.x' + { $if_stmt10 = new IfStmt($cond, $stmt.x, 0); }; + ^^^^^^^ +test.y:41.12-42.57: symbol not found in production: stmt + if_stmt10: IF expr[cond] THEN stmt[stmt.x] FI + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +test.y:41.36-41: possibly meant: $[stmt.x].x, hiding $stmt.x at $4 + if_stmt10: IF expr[cond] THEN stmt[stmt.x] FI + ^^^^^^ +test.y:41.36-41: possibly meant: $[stmt.x] at $4 + if_stmt10: IF expr[cond] THEN stmt[stmt.x] FI + ^^^^^^ +test.y:44.13-22: error: invalid reference: '$if-stmt-a' + { $if-stmt-a = new IfStmt($cond, $then, $else); }; + ^^^^^^^^^^ +test.y:43.12-44.59: symbol not found in production: if + if-stmt-a: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +test.y:43.1-9: possibly meant: $[if-stmt-a] at $$ + if-stmt-a: IF expr[cond] THEN stmt.list[then] ELSE stmt.list[else] FI + ^^^^^^^^^ +test.y:46.46-54: error: invalid reference: '$then-a.f' + { $[if-stmt-b] = new IfStmt($cond, $then-a.f, $else); }; + ^^^^^^^^^ +test.y:45.12-46.65: symbol not found in production: then + if-stmt-b: IF expr[cond] THEN if-stmt-a[then-a] ELSE stmt.list[else] FI + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +test.y:45.41-46: possibly meant: $[then-a].f at $4 + if-stmt-b: IF expr[cond] THEN if-stmt-a[then-a] ELSE stmt.list[else] FI + ^^^^^^ +]]) + AT_CLEANUP ####################################################################### diff --git a/tests/reduce.at b/tests/reduce.at index bf43bf9d..47f923cf 100644 --- a/tests/reduce.at +++ b/tests/reduce.at @@ -142,6 +142,65 @@ useless8: '8'; useless9: '9'; ]]) +AT_BISON_CHECK([[-fcaret input.y]], 0, [], +[[input.y: warning: 9 nonterminals useless in grammar +input.y: warning: 9 rules useless in grammar +input.y:6.1-8: warning: nonterminal useless in grammar: useless1 + useless1: '1'; + ^^^^^^^^ +input.y:7.1-8: warning: nonterminal useless in grammar: useless2 + useless2: '2'; + ^^^^^^^^ +input.y:8.1-8: warning: nonterminal useless in grammar: useless3 + useless3: '3'; + ^^^^^^^^ +input.y:9.1-8: warning: nonterminal useless in grammar: useless4 + useless4: '4'; + ^^^^^^^^ +input.y:10.1-8: warning: nonterminal useless in grammar: useless5 + useless5: '5'; + ^^^^^^^^ +input.y:11.1-8: warning: nonterminal useless in grammar: useless6 + useless6: '6'; + ^^^^^^^^ +input.y:12.1-8: warning: nonterminal useless in grammar: useless7 + useless7: '7'; + ^^^^^^^^ +input.y:13.1-8: warning: nonterminal useless in grammar: useless8 + useless8: '8'; + ^^^^^^^^ +input.y:14.1-8: warning: nonterminal useless in grammar: useless9 + useless9: '9'; + ^^^^^^^^ +input.y:6.11-13: warning: rule useless in grammar + useless1: '1'; + ^^^ +input.y:7.11-13: warning: rule useless in grammar + useless2: '2'; + ^^^ +input.y:8.11-13: warning: rule useless in grammar + useless3: '3'; + ^^^ +input.y:9.11-13: warning: rule useless in grammar + useless4: '4'; + ^^^ +input.y:10.11-13: warning: rule useless in grammar + useless5: '5'; + ^^^ +input.y:11.11-13: warning: rule useless in grammar + useless6: '6'; + ^^^ +input.y:12.11-13: warning: rule useless in grammar + useless7: '7'; + ^^^ +input.y:13.11-13: warning: rule useless in grammar + useless8: '8'; + ^^^ +input.y:14.11-13: warning: rule useless in grammar + useless9: '9'; + ^^^ +]]) + AT_BISON_CHECK([[input.y]], 0, [], [[input.y: warning: 9 nonterminals useless in grammar input.y: warning: 9 rules useless in grammar @@ -238,6 +297,26 @@ non_productive: non_productive useless_token %% ]]) +AT_BISON_CHECK([[-fcaret not-reduced.y]], 0, [], +[[not-reduced.y: warning: 2 nonterminals useless in grammar +not-reduced.y: warning: 3 rules useless in grammar +not-reduced.y:14.1-13: warning: nonterminal useless in grammar: not_reachable + not_reachable: useful { /* A not reachable action. */ } + ^^^^^^^^^^^^^ +not-reduced.y:11.6-19: warning: nonterminal useless in grammar: non_productive + | non_productive { /* A non productive action. */ } + ^^^^^^^^^^^^^^ +not-reduced.y:11.6-57: warning: rule useless in grammar + | non_productive { /* A non productive action. */ } + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +not-reduced.y:14.16-56: warning: rule useless in grammar + not_reachable: useful { /* A not reachable action. */ } + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +not-reduced.y:17.17-18.63: warning: rule useless in grammar + non_productive: non_productive useless_token + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +]]) + AT_BISON_CHECK([[not-reduced.y]], 0, [], [[not-reduced.y: warning: 2 nonterminals useless in grammar not-reduced.y: warning: 3 rules useless in grammar diff --git a/tests/regression.at b/tests/regression.at index 3fa20e27..db6c3b9f 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -481,6 +481,14 @@ AT_BISON_CHECK([-o input.c input.y], [[0]], [[]], [[input.y:22.8-14: warning: symbol SPECIAL redeclared input.y:22.8-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string ]]) +AT_BISON_CHECK([-fcaret -o input.c input.y], [[0]], [[]], +[[input.y:22.8-14: warning: symbol SPECIAL redeclared + %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!" + ^^^^^^^ +input.y:22.8-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string + %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!" + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +]]) AT_COMPILE([input]) # Checking the error message here guarantees that yytname, which does contain