mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-20 09:43:03 +00:00
glr: strengthen the tests
On some experimentation I was running, the test suite was passing, yet the example crashed when run in verbose mode. Let's add this case to the test suite. * tests/cxx-type.at: Run all these tests in verbose mode too.
This commit is contained in:
@@ -28,6 +28,7 @@ m4_define([_AT_TEST_GLR_CXXTYPES],
|
|||||||
AT_DATA_GRAMMAR([types.y],
|
AT_DATA_GRAMMAR([types.y],
|
||||||
[[/* Simplified C++ Type and Expression Grammar. */
|
[[/* Simplified C++ Type and Expression Grammar. */
|
||||||
|
|
||||||
|
%define parse.trace
|
||||||
$1
|
$1
|
||||||
|
|
||||||
%code requires
|
%code requires
|
||||||
@@ -127,10 +128,21 @@ declarator : ID
|
|||||||
int
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
{
|
{
|
||||||
assert (argc == 2); (void) argc;
|
if (getenv ("YYDEBUG"))
|
||||||
if (!freopen (argv[1], "r", stdin))
|
yydebug = 1;
|
||||||
return 3;
|
for (int i = 1; i < argc; ++i)
|
||||||
return yyparse ();
|
// Enable parse traces on option -p.
|
||||||
|
if (strcmp (argv[i], "-p") == 0)
|
||||||
|
yydebug = 1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!freopen (argv[i], "r", stdin))
|
||||||
|
return 3;
|
||||||
|
int status = yyparse ();
|
||||||
|
if (!status)
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
]AT_YYERROR_DEFINE[
|
]AT_YYERROR_DEFINE[
|
||||||
@@ -383,67 +395,67 @@ m4_define([_AT_VERBOSE_GLR_STDERR_WITH_LOC],
|
|||||||
[[17.5: syntax error, unexpected ID, expecting '=' or '+' or ')'
|
[[17.5: syntax error, unexpected ID, expecting '=' or '+' or ')'
|
||||||
]])
|
]])
|
||||||
|
|
||||||
|
|
||||||
## ---------------------------------------------------- ##
|
## ---------------------------------------------------- ##
|
||||||
## Compile the grammar described in the documentation. ##
|
## Compile the grammar described in the documentation. ##
|
||||||
## ---------------------------------------------------- ##
|
## ---------------------------------------------------- ##
|
||||||
|
|
||||||
|
# AT_TEST([STDOUT], [STDERR])
|
||||||
|
m4_pushdef([AT_TEST],
|
||||||
|
[AT_PARSER_CHECK([[types test-input]], 0, [$1], [$2])
|
||||||
|
AT_PARSER_CHECK([[types -p test-input]], 0, [$1], [ignore])
|
||||||
|
])
|
||||||
|
|
||||||
AT_SETUP([GLR: Resolve ambiguity, impure, no locations])
|
AT_SETUP([GLR: Resolve ambiguity, impure, no locations])
|
||||||
_AT_TEST_GLR_CXXTYPES([],
|
_AT_TEST_GLR_CXXTYPES([],
|
||||||
[%dprec 1], [%dprec 2])
|
[%dprec 1], [%dprec 2])
|
||||||
AT_PARSER_CHECK([[types test-input]], 0,
|
AT_TEST([_AT_RESOLVED_GLR_OUTPUT], [_AT_GLR_STDERR])
|
||||||
[_AT_RESOLVED_GLR_OUTPUT], [_AT_GLR_STDERR])
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
AT_SETUP([GLR: Resolve ambiguity, impure, locations])
|
AT_SETUP([GLR: Resolve ambiguity, impure, locations])
|
||||||
_AT_TEST_GLR_CXXTYPES([%locations],[%dprec 1],[%dprec 2])
|
_AT_TEST_GLR_CXXTYPES([%locations],[%dprec 1],[%dprec 2])
|
||||||
AT_PARSER_CHECK([[types test-input]], 0,
|
AT_TEST([_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC])
|
||||||
[_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC])
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
AT_SETUP([GLR: Resolve ambiguity, pure, no locations])
|
AT_SETUP([GLR: Resolve ambiguity, pure, no locations])
|
||||||
_AT_TEST_GLR_CXXTYPES([%define api.pure],
|
_AT_TEST_GLR_CXXTYPES([%define api.pure],
|
||||||
[%dprec 1], [%dprec 2])
|
[%dprec 1], [%dprec 2])
|
||||||
AT_PARSER_CHECK([[types test-input]], 0,
|
AT_TEST([_AT_RESOLVED_GLR_OUTPUT], [_AT_GLR_STDERR])
|
||||||
[_AT_RESOLVED_GLR_OUTPUT], [_AT_GLR_STDERR])
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
AT_SETUP([GLR: Resolve ambiguity, pure, locations])
|
AT_SETUP([GLR: Resolve ambiguity, pure, locations])
|
||||||
_AT_TEST_GLR_CXXTYPES([%define api.pure %locations],
|
_AT_TEST_GLR_CXXTYPES([%define api.pure %locations],
|
||||||
[%dprec 1], [%dprec 2])
|
[%dprec 1], [%dprec 2])
|
||||||
AT_PARSER_CHECK([[types test-input]], 0,
|
AT_TEST([_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC])
|
||||||
[_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC])
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
AT_SETUP([GLR: Merge conflicting parses, impure, no locations])
|
AT_SETUP([GLR: Merge conflicting parses, impure, no locations])
|
||||||
_AT_TEST_GLR_CXXTYPES([],
|
_AT_TEST_GLR_CXXTYPES([],
|
||||||
[%merge <stmtMerge>], [%merge <stmtMerge>])
|
[%merge <stmtMerge>], [%merge <stmtMerge>])
|
||||||
AT_PARSER_CHECK([[types test-input]], 0,
|
AT_TEST([_AT_AMBIG_GLR_OUTPUT], [_AT_GLR_STDERR])
|
||||||
[_AT_AMBIG_GLR_OUTPUT], [_AT_GLR_STDERR])
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
AT_SETUP([GLR: Merge conflicting parses, impure, locations])
|
AT_SETUP([GLR: Merge conflicting parses, impure, locations])
|
||||||
_AT_TEST_GLR_CXXTYPES([%locations],
|
_AT_TEST_GLR_CXXTYPES([%locations],
|
||||||
[%merge <stmtMerge>], [%merge <stmtMerge>])
|
[%merge <stmtMerge>], [%merge <stmtMerge>])
|
||||||
AT_PARSER_CHECK([[types test-input]], 0,
|
AT_TEST([_AT_AMBIG_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC])
|
||||||
[_AT_AMBIG_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC])
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
AT_SETUP([GLR: Merge conflicting parses, pure, no locations])
|
AT_SETUP([GLR: Merge conflicting parses, pure, no locations])
|
||||||
_AT_TEST_GLR_CXXTYPES([%define api.pure],
|
_AT_TEST_GLR_CXXTYPES([%define api.pure],
|
||||||
[%merge <stmtMerge>], [%merge <stmtMerge>])
|
[%merge <stmtMerge>], [%merge <stmtMerge>])
|
||||||
AT_PARSER_CHECK([[types test-input]], 0,
|
AT_TEST([_AT_AMBIG_GLR_OUTPUT], [_AT_GLR_STDERR])
|
||||||
[_AT_AMBIG_GLR_OUTPUT], [_AT_GLR_STDERR])
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
AT_SETUP([GLR: Merge conflicting parses, pure, locations])
|
AT_SETUP([GLR: Merge conflicting parses, pure, locations])
|
||||||
_AT_TEST_GLR_CXXTYPES([%define api.pure %locations],
|
_AT_TEST_GLR_CXXTYPES([%define api.pure %locations],
|
||||||
[%merge <stmtMerge>],[%merge <stmtMerge>])
|
[%merge <stmtMerge>],[%merge <stmtMerge>])
|
||||||
AT_PARSER_CHECK([[types test-input]], 0,
|
AT_TEST([_AT_AMBIG_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC])
|
||||||
[_AT_AMBIG_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC])
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
AT_SETUP([GLR: Verbose messages, resolve ambiguity, impure, no locations])
|
AT_SETUP([GLR: Verbose messages, resolve ambiguity, impure, no locations])
|
||||||
_AT_TEST_GLR_CXXTYPES([%define parse.error verbose],
|
_AT_TEST_GLR_CXXTYPES([%define parse.error verbose],
|
||||||
[%merge <stmtMerge>], [%merge <stmtMerge>])
|
[%merge <stmtMerge>], [%merge <stmtMerge>])
|
||||||
AT_PARSER_CHECK([[types test-input]], 0,
|
AT_TEST([_AT_AMBIG_GLR_OUTPUT], [_AT_VERBOSE_GLR_STDERR])
|
||||||
[_AT_AMBIG_GLR_OUTPUT], [_AT_VERBOSE_GLR_STDERR])
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
|
m4_popdef([AT_TEST])
|
||||||
|
|||||||
Reference in New Issue
Block a user