[PATCH 10/10] glr2.cc: run the glr-regression tests

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>
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)
    763: Ambiguity reports: glr2.cc                      FAILED (glr-regression.at:1968)
    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

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)
    763: Ambiguity reports: glr2.cc                      FAILED (glr-regression.at:1961)

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)

* 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])
-- 
2.29.2
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.