bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: Akim Demaille
Subject: [PATCH 10/10] glr2.cc: run the glr-regression tests
Date: Sun, 6 Dec 2020 14:10:37 +0100

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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]