mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
Merge remote-tracking branch 'origin/maint'
* origin/maint: misc: pacify the Tiny C Compiler cpp: make the check of Flex version portable misc: require getline c++: support wide strings for file names doc: document carets tests: enhance existing tests with carets errors: show carets getargs: add support for --flags/-f Conflicts: doc/bison.texi m4/.gitignore src/complain.c src/flex-scanner.h src/getargs.c src/getargs.h src/gram.c src/main.c tests/headers.at
This commit is contained in:
@@ -1329,6 +1329,21 @@ input.y:33.3-23: warning: unset value: $$ [-Wother]
|
||||
input.y:30.3-35.37: warning: unused value: $3 [-Wother]
|
||||
]])
|
||||
|
||||
AT_BISON_CHECK([-fcaret -o input.c input.y], 0,,
|
||||
[[input.y:24.70-72: warning: useless %destructor for type <*> [-Wother]
|
||||
%printer { fprintf (yyoutput, "<*> printer should not be called"); } <*>
|
||||
^^^
|
||||
input.y:24.70-72: warning: useless %printer for type <*> [-Wother]
|
||||
%printer { fprintf (yyoutput, "<*> printer should not be called"); } <*>
|
||||
^^^
|
||||
input.y:33.3-23: warning: unset value: $$ [-Wother]
|
||||
{ @$ = 4; } // Only used.
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
input.y:30.3-35.37: warning: unused value: $3 [-Wother]
|
||||
{ @$ = 1; } // Not set or used.
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
]])
|
||||
|
||||
AT_COMPILE([input])
|
||||
AT_PARSER_CHECK([./input], 1,,
|
||||
[[Starting parse
|
||||
|
||||
@@ -40,6 +40,12 @@ AT_BISON_CHECK([-o input.c input.y], 0, [],
|
||||
[[input.y:4.9: warning: rule useless in parser due to conflicts: e: /* empty */ [-Wother]
|
||||
]])
|
||||
|
||||
AT_BISON_CHECK([-fcaret -o input.c input.y], 0, [],
|
||||
[[input.y:4.9: warning: rule useless in parser due to conflicts [-Wother]
|
||||
e: 'e' | /* Nothing. */;
|
||||
^
|
||||
]])
|
||||
|
||||
AT_CLEANUP
|
||||
|
||||
|
||||
|
||||
@@ -229,27 +229,30 @@ AT_TEST([x8], [%define api.pure %define api.push-pull both])
|
||||
# C++ output relies on namespaces and still uses yy a lot.
|
||||
#
|
||||
# Check there is no 'YY' left.
|
||||
# Ignore comments, YYPUSH_MORE(_DEFINED)? (constant definition),
|
||||
# Ignore comments, YYChar (template parameter), YYPARSE_PARAM
|
||||
# (obsolete), YYPUSH_MORE(_DEFINED)? (constant definition),
|
||||
# YY_\w+_INCLUDED (header guards).
|
||||
#
|
||||
# YYDEBUG (not renamed) can be read, but not changed.
|
||||
AT_CHECK([[$PERL -n -0777 -e '
|
||||
s{/\*.*?\*/}{}gs;
|
||||
s{//.*}{}g;
|
||||
s{\b(YYPUSH_MORE(_DEFINED)?
|
||||
s{\b(YYChar
|
||||
|YYPARSE_PARAM
|
||||
|YYPUSH_MORE(_DEFINED)?
|
||||
|YY_\w+_INCLUDED
|
||||
|YY_NULL
|
||||
|(defined|if)\ YYDEBUG
|
||||
)\b}{}gx;
|
||||
while (/^(.*YY.*)$/gm)
|
||||
{
|
||||
print "$ARGV: $1\n";
|
||||
print "$ARGV: invalid exported YY: $1\n";
|
||||
}
|
||||
if ($ARGV =~ /\.h$/)
|
||||
{
|
||||
while (/^(.*yy.*)$/gm)
|
||||
{
|
||||
print "$ARGV: $1\n";
|
||||
print "$ARGV: invalid exported yy: $1\n";
|
||||
}
|
||||
}
|
||||
' -- *.hh *.h]])
|
||||
|
||||
@@ -925,6 +925,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 <f> 'a
|
||||
^^
|
||||
input.y:16.11-17.0: error: missing '"' at end of line
|
||||
%type <f> "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
|
||||
|
||||
|
||||
@@ -1157,6 +1176,18 @@ AT_BISON_CHECK([[-Dvar=cmd-d input-dg.y]], [[1]], [],
|
||||
<command line>: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"
|
||||
^^^
|
||||
<command line>:2: previous definition
|
||||
]])
|
||||
|
||||
AT_DATA([[input-unused.y]],
|
||||
[[%%
|
||||
start: ;
|
||||
|
||||
@@ -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
|
||||
|
||||
#######################################################################
|
||||
|
||||
@@ -142,6 +142,65 @@ useless8: '8';
|
||||
useless9: '9';
|
||||
]])
|
||||
|
||||
AT_BISON_CHECK([[-fcaret input.y]], 0, [],
|
||||
[[input.y: warning: 9 nonterminals useless in grammar [-Wother]
|
||||
input.y: warning: 9 rules useless in grammar [-Wother]
|
||||
input.y:6.1-8: warning: nonterminal useless in grammar: useless1 [-Wother]
|
||||
useless1: '1';
|
||||
^^^^^^^^
|
||||
input.y:7.1-8: warning: nonterminal useless in grammar: useless2 [-Wother]
|
||||
useless2: '2';
|
||||
^^^^^^^^
|
||||
input.y:8.1-8: warning: nonterminal useless in grammar: useless3 [-Wother]
|
||||
useless3: '3';
|
||||
^^^^^^^^
|
||||
input.y:9.1-8: warning: nonterminal useless in grammar: useless4 [-Wother]
|
||||
useless4: '4';
|
||||
^^^^^^^^
|
||||
input.y:10.1-8: warning: nonterminal useless in grammar: useless5 [-Wother]
|
||||
useless5: '5';
|
||||
^^^^^^^^
|
||||
input.y:11.1-8: warning: nonterminal useless in grammar: useless6 [-Wother]
|
||||
useless6: '6';
|
||||
^^^^^^^^
|
||||
input.y:12.1-8: warning: nonterminal useless in grammar: useless7 [-Wother]
|
||||
useless7: '7';
|
||||
^^^^^^^^
|
||||
input.y:13.1-8: warning: nonterminal useless in grammar: useless8 [-Wother]
|
||||
useless8: '8';
|
||||
^^^^^^^^
|
||||
input.y:14.1-8: warning: nonterminal useless in grammar: useless9 [-Wother]
|
||||
useless9: '9';
|
||||
^^^^^^^^
|
||||
input.y:6.11-13: warning: rule useless in grammar [-Wother]
|
||||
useless1: '1';
|
||||
^^^
|
||||
input.y:7.11-13: warning: rule useless in grammar [-Wother]
|
||||
useless2: '2';
|
||||
^^^
|
||||
input.y:8.11-13: warning: rule useless in grammar [-Wother]
|
||||
useless3: '3';
|
||||
^^^
|
||||
input.y:9.11-13: warning: rule useless in grammar [-Wother]
|
||||
useless4: '4';
|
||||
^^^
|
||||
input.y:10.11-13: warning: rule useless in grammar [-Wother]
|
||||
useless5: '5';
|
||||
^^^
|
||||
input.y:11.11-13: warning: rule useless in grammar [-Wother]
|
||||
useless6: '6';
|
||||
^^^
|
||||
input.y:12.11-13: warning: rule useless in grammar [-Wother]
|
||||
useless7: '7';
|
||||
^^^
|
||||
input.y:13.11-13: warning: rule useless in grammar [-Wother]
|
||||
useless8: '8';
|
||||
^^^
|
||||
input.y:14.11-13: warning: rule useless in grammar [-Wother]
|
||||
useless9: '9';
|
||||
^^^
|
||||
]])
|
||||
|
||||
AT_BISON_CHECK([[input.y]], 0, [],
|
||||
[[input.y: warning: 9 nonterminals useless in grammar [-Wother]
|
||||
input.y: warning: 9 rules useless in grammar [-Wother]
|
||||
@@ -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 [-Wother]
|
||||
not-reduced.y: warning: 3 rules useless in grammar [-Wother]
|
||||
not-reduced.y:14.1-13: warning: nonterminal useless in grammar: not_reachable [-Wother]
|
||||
not_reachable: useful { /* A not reachable action. */ }
|
||||
^^^^^^^^^^^^^
|
||||
not-reduced.y:11.6-19: warning: nonterminal useless in grammar: non_productive [-Wother]
|
||||
| non_productive { /* A non productive action. */ }
|
||||
^^^^^^^^^^^^^^
|
||||
not-reduced.y:11.6-57: warning: rule useless in grammar [-Wother]
|
||||
| non_productive { /* A non productive action. */ }
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
not-reduced.y:14.16-56: warning: rule useless in grammar [-Wother]
|
||||
not_reachable: useful { /* A not reachable action. */ }
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
not-reduced.y:17.17-18.63: warning: rule useless in grammar [-Wother]
|
||||
non_productive: non_productive useless_token
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
]])
|
||||
|
||||
AT_BISON_CHECK([[not-reduced.y]], 0, [],
|
||||
[[not-reduced.y: warning: 2 nonterminals useless in grammar [-Wother]
|
||||
not-reduced.y: warning: 3 rules useless in grammar [-Wother]
|
||||
|
||||
@@ -481,6 +481,14 @@ AT_BISON_CHECK([-o input.c input.y], [[0]], [[]],
|
||||
[[input.y:22.8-14: warning: symbol SPECIAL redeclared [-Wother]
|
||||
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 [-Wother]
|
||||
]])
|
||||
AT_BISON_CHECK([-fcaret -o input.c input.y], [[0]], [[]],
|
||||
[[input.y:22.8-14: warning: symbol SPECIAL redeclared [-Wother]
|
||||
%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 [-Wother]
|
||||
%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
|
||||
|
||||
Reference in New Issue
Block a user