From 42fe808292ba35e8e54fd220b71b0f7cd2b4110a Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sun, 6 Dec 2020 06:54:56 +0100 Subject: [PATCH] glr2.cc: run the glr-regression tests When installed on master as of 2020-12-05 (on top of "glr2.cc: fix when the stack is not expandable", almost all the GLR regression tests fail (with a SEGV): 709: Badly Collapsed GLR States: glr2.cc FAILED (glr-regression.at:130) 712: Improper handling of embedded actions and dollar(-N) in GLR parsers: glr2.cc FAILED (glr-regression.at:275) 715: Improper merging of GLR delayed action sets: glr2.cc FAILED (glr-regression.at:404) 718: Duplicate representation of merged trees: glr2.cc FAILED (glr-regression.at:502) 721: User destructor for unresolved GLR semantic value: glr2.cc FAILED (glr-regression.at:566) 724: User destructor after an error during a split parse: glr2.cc FAILED (glr-regression.at:624) 727: Duplicated user destructor for lookahead: glr2.cc FAILED (glr-regression.at:724) 730: Incorrectly initialized location for empty right-hand side in GLR: glr2.cc FAILED (glr-regression.at:823) 733: No users destructors if stack 0 deleted: glr2.cc FAILED (glr-regression.at:911) 736: Corrupted semantic options if user action cuts parse: glr2.cc FAILED (glr-regression.at:974) 739: Undesirable destructors if user action cuts parse: glr2.cc FAILED (glr-regression.at:1042) 742: Leaked semantic values if user action cuts parse: glr2.cc FAILED (glr-regression.at:1173) 748: Incorrect lookahead during nondeterministic GLR: glr2.cc FAILED (glr-regression.at:1546) 751: Leaked semantic values when reporting ambiguity: glr2.cc FAILED (glr-regression.at:1639) 754: Leaked lookahead after nondeterministic parse syntax error: glr2.cc FAILED (glr-regression.at:1710) 757: Uninitialized location when reporting ambiguity: glr2.cc FAILED (glr-regression.at:1794) 766: Predicates: glr2.cc FAILED (glr-regression.at:2045) These pass: 745: Incorrect lookahead during deterministic GLR: glr2.cc ok 760: Missed %merge type warnings when LHS type is declared later: glr2.cc ok 763: Ambiguity reports: glr2.cc ok With Valentin Tolmer's "glr2.cc: Fix memory corruption bug" commit, these test fail "gracefully": 712: Improper handling of embedded actions and dollar(-N) in GLR parsers: glr2.cc FAILED (glr-regression.at:268) 730: Incorrectly initialized location for empty right-hand side in GLR: glr2.cc FAILED (glr-regression.at:816) 748: Incorrect lookahead during nondeterministic GLR: glr2.cc FAILED (glr-regression.at:1539) And these do not end: 709: Badly Collapsed GLR States: glr2.cc FAILED (glr-regression.at:123) 715: Improper merging of GLR delayed action sets: glr2.cc FAILED (glr-regression.at:397) 718: Duplicate representation of merged trees: glr2.cc FAILED (glr-regression.at:495) 751: Leaked semantic values when reporting ambiguity: glr2.cc FAILED (glr-regression.at:1632) With "tests: glr2.cc: run the glr-regression tests", none loop, and 709, 715, and 751 pass. Only 718 still fails. * tests/glr-regression.at: Run all the tests with glr2.cc. * tests/local.at (AT_GLR2_CC_IF): New. --- tests/glr-regression.at | 47 +++++++++++++++++++++++++++++++++++++---- tests/local.at | 3 +++ 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/tests/glr-regression.at b/tests/glr-regression.at index 36093048..e0d61958 100644 --- a/tests/glr-regression.at +++ b/tests/glr-regression.at @@ -18,6 +18,13 @@ AT_BANNER([[GLR Regression Tests]]) +# You might wonder what's the point of having names different for each +# test case. When some endlessly loop, it is nice to see their "name" +# in ps. + +# AT_YYPARSE_DEFINE +# ----------------- +# Wrap the C++ parser in a C-like function interface. m4_pushdef([AT_YYPARSE_DEFINE], [AT_CXX_IF([[ static int @@ -39,6 +46,7 @@ m4_pushdef([AT_TEST], [AT_SETUP([Badly Collapsed GLR States: $1]) AT_BISON_OPTION_PUSHDEFS([%glr-parser $1]) + AT_DATA_GRAMMAR([glr-regr1.y], [[/* Regression Test: Improper state compression */ /* Reported by Scott McPeak */ @@ -120,6 +128,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -133,6 +142,8 @@ m4_pushdef([AT_TEST], [AT_SETUP([Improper handling of embedded actions and dollar(-N) in GLR parsers: $1]) AT_BISON_OPTION_PUSHDEFS([%glr-parser $1]) +AT_GLR2_CC_IF([AT_XFAIL_IF([true])]) + AT_DATA_GRAMMAR([glr-regr2a.y], [[/* Regression Test: Improper handling of embedded actions and $-N */ /* Reported by S. Eken */ @@ -264,6 +275,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -276,6 +288,7 @@ m4_pushdef([AT_TEST], [AT_SETUP([Improper merging of GLR delayed action sets: $1]) AT_BISON_OPTION_PUSHDEFS([%glr-parser $1]) + AT_DATA_GRAMMAR([glr-regr3.y], [[/* Regression Test: Improper merging of GLR delayed action sets. */ /* Reported by M. Rosien */ @@ -392,6 +405,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -405,6 +419,8 @@ m4_pushdef([AT_TEST], [AT_SETUP([Duplicate representation of merged trees: $1]) AT_BISON_OPTION_PUSHDEFS([%glr-parser $1]) +AT_GLR2_CC_IF([AT_XFAIL_IF([true])]) + AT_DATA_GRAMMAR([glr-regr4.y], [[ %define parse.assert @@ -489,6 +505,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -552,6 +569,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -609,6 +627,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -623,6 +642,7 @@ m4_pushdef([AT_TEST], [AT_SETUP([Duplicated user destructor for lookahead: $1]) AT_BISON_OPTION_PUSHDEFS([%glr-parser $1]) + AT_DATA_GRAMMAR([glr-regr7.y], [[ %code requires { @@ -708,6 +728,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -724,6 +745,8 @@ m4_pushdef([AT_TEST], [AT_SETUP([Incorrectly initialized location for empty right-hand side in GLR: $1]) AT_BISON_OPTION_PUSHDEFS([%glr-parser %locations $1]) +AT_GLR2_CC_IF([AT_XFAIL_IF([true])]) + AT_DATA_GRAMMAR([glr-regr8.y], [[ %code { @@ -806,6 +829,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -893,6 +917,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -955,6 +980,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -1022,6 +1048,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -1152,6 +1179,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -1293,6 +1321,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -1306,6 +1335,8 @@ m4_pushdef([AT_TEST], [AT_SETUP([Incorrect lookahead during nondeterministic GLR: $1]) AT_BISON_OPTION_PUSHDEFS([%glr-parser %locations $1]) +AT_GLR2_CC_IF([AT_XFAIL_IF([true])]) + AT_DATA_GRAMMAR([glr-regr14.y], [[ /* Tests: @@ -1411,7 +1442,7 @@ stack_explosion: alt1: 'd' no_look { USE ($][1); - if (yychar != 'd' && yychar != YYEOF) + if (yychar != 'd' && yychar != ]AT_GLR2_CC_IF([yy::parser::token::])[YYEOF) { fprintf (stderr, "Incorrect lookahead during stack explosion.\n"); } @@ -1420,7 +1451,7 @@ alt1: alt2: 'd' no_look { USE ($][1); - if (yychar != 'd' && yychar != YYEOF) + if (yychar != 'd' && yychar != ]AT_GLR2_CC_IF([yy::parser::token::])[YYEOF) { fprintf (stderr, "Incorrect lookahead during stack explosion.\n"); } @@ -1429,7 +1460,7 @@ alt2: alt3: 'd' no_look { USE ($][1); - if (yychar != 'd' && yychar != YYEOF) + if (yychar != 'd' && yychar != ]AT_GLR2_CC_IF([yy::parser::token::])[YYEOF) { fprintf (stderr, "Incorrect lookahead during stack explosion.\n"); } @@ -1437,7 +1468,7 @@ alt3: ; no_look: { - if (yychar != YYEMPTY) + if (yychar != ]AT_GLR2_CC_IF([yy::parser::token::])[YYEMPTY) { fprintf (stderr, "Found lookahead where shouldn't during stack explosion.\n"); @@ -1523,6 +1554,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -1536,6 +1568,7 @@ m4_pushdef([AT_TEST], [AT_SETUP([Leaked semantic values when reporting ambiguity: $1]) AT_BISON_OPTION_PUSHDEFS([%glr-parser $1]) + AT_DATA_GRAMMAR([glr-regr15.y], [[ %define parse.assert @@ -1615,6 +1648,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -1685,6 +1719,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -1768,6 +1803,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c" %define api.pure]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -1828,6 +1864,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -1940,6 +1977,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -2016,6 +2054,7 @@ AT_CLEANUP AT_TEST([%skeleton "glr.c"]) AT_TEST([%skeleton "glr.cc"]) +AT_TEST([%skeleton "glr2.cc"]) m4_popdef([AT_TEST]) diff --git a/tests/local.at b/tests/local.at index e4242b39..f68d6e5b 100644 --- a/tests/local.at +++ b/tests/local.at @@ -244,6 +244,8 @@ m4_pushdef([AT_LALR1_CC_IF], [AT_CXX_IF([AT_GLR_IF([$2], [$1])], [$2])]) m4_pushdef([AT_GLR_CC_IF], [AT_CXX_IF([AT_GLR_IF([$1], [$2])], [$2])]) +m4_pushdef([AT_GLR2_CC_IF], + [m4_bmatch([$3], [%skeleton "glr2\.cc"], [$1], [$2])]) # Using yacc.c? m4_pushdef([AT_YACC_IF], [m4_bmatch([$3], [%language\|%glr-parser\|%skeleton], [$2], [$1])]) @@ -460,6 +462,7 @@ m4_popdef([AT_CXX_IF]) m4_popdef([AT_C_IF]) m4_popdef([AT_LANG]) m4_popdef([AT_JAVA_IF]) +m4_popdef([AT_GLR2_CC_IF]) m4_popdef([AT_GLR_CC_IF]) m4_popdef([AT_LALR1_CC_IF]) m4_popdef([AT_ERROR_SIMPLE_IF])