]> git.saurik.com Git - bison.git/blobdiff - tests/actions.at
Merge remote-tracking branch 'origin/maint'
[bison.git] / tests / actions.at
index dd909b00d7496534390b078c5afd739a63094136..4b0019b84f112ad4ea4b763df29bf429d973cc41 100644 (file)
@@ -1,4 +1,4 @@
-# Executing Actions.                               -*- Autotest -*-
+e# Executing Actions.                               -*- Autotest -*-
 
 # Copyright (C) 2001-2012 Free Software Foundation, Inc.
 
@@ -30,7 +30,7 @@ AT_SETUP([Mid-rule actions])
 
 AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([[input.y]],
-[[%error-verbose
+[[%define parse.error verbose
 %debug
 %{
 ]AT_YYERROR_DECLARE[
@@ -80,7 +80,7 @@ AT_SETUP([Exotic Dollars])
 
 AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([[input.y]],
-[[%error-verbose
+[[%define parse.error verbose
 %debug
 %{
 ]AT_YYERROR_DECLARE[
@@ -136,7 +136,7 @@ AT_PARSER_CHECK([./input], 0,
 AT_DATA_GRAMMAR([[input.y]],
 [[
 %{
-#include <stdio.h>
+# include <stdio.h>
 ]AT_YYERROR_DECLARE[
 ]AT_YYLEX_DECLARE[
   typedef struct { int val; } stype;
@@ -264,7 +264,7 @@ input:
       V(input, $$, @$, ": /* Nothing */\n");
     }
 | line input /* Right recursive to load the stack so that popping at
-               END can be exercised.  */
+                END can be exercised.  */
     {
       $$ = 2;
       V(input, $$, @$, ": ");
@@ -561,7 +561,7 @@ m4_define([AT_CHECK_PRINTER_AND_DESTRUCTOR],
 
 $3
 _AT_CHECK_PRINTER_AND_DESTRUCTOR($[1], $[2], $[3], $[4],
-[%error-verbose
+[%define parse.error verbose
 %debug
 %verbose
 %locations
@@ -592,7 +592,7 @@ AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser], [with union])
 AT_SETUP([Default tagless %printer and %destructor])
 AT_BISON_OPTION_PUSHDEFS([%locations])
 AT_DATA_GRAMMAR([[input.y]],
-[[%error-verbose
+[[%define parse.error verbose
 %debug
 %locations
 %initial-action {
@@ -646,7 +646,10 @@ main (void)
 }
 ]])
 
-AT_BISON_CHECK([-o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y], [], [],
+[[input.y:27.3-5: warning: useless %destructor for type <*> [-Wother]
+input.y:27.3-5: warning: useless %printer for type <*> [-Wother]
+]])
 AT_COMPILE([input])
 AT_PARSER_CHECK([./input], 1,
 [[<> destructor for 'd' @ 4.
@@ -694,7 +697,7 @@ AT_CLEANUP
 AT_SETUP([Default tagged and per-type %printer and %destructor])
 AT_BISON_OPTION_PUSHDEFS
 AT_DATA_GRAMMAR([[input.y]],
-[[%error-verbose
+[[%define parse.error verbose
 %debug
 
 %{
@@ -758,7 +761,10 @@ main (void)
 }
 ]])
 
-AT_BISON_CHECK([-o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y], [], [],
+[[input.y:22.3-4: warning: useless %destructor for type <> [-Wother]
+input.y:22.3-4: warning: useless %printer for type <> [-Wother]
+]])
 AT_COMPILE([input])
 AT_PARSER_CHECK([./input], 1,
 [[<*>/<field2>/e destructor.
@@ -817,16 +823,16 @@ AT_CLEANUP
 
 AT_SETUP([Default %printer and %destructor for user-defined end token])
 
-# _AT_CHECK_DEFAULT_PRINTER_AND_DESTRUCTOR_FOR_END_TOKEN(TYPED)
-# -------------------------------------------------------------
-m4_define([_AT_CHECK_DEFAULT_PRINTER_AND_DESTRUCTOR_FOR_END_TOKEN],
+# AT_TEST(TYPED)
+# --------------
+m4_pushdef([AT_TEST],
 [m4_if($1, 0,
   [m4_pushdef([kind], []) m4_pushdef([not_kind], [*])],
   [m4_pushdef([kind], [*]) m4_pushdef([not_kind], [])])
 
 AT_BISON_OPTION_PUSHDEFS([%locations])
 AT_DATA_GRAMMAR([[input]]$1[[.y]],
-[[%error-verbose
+[[%define parse.error verbose
 %debug
 %locations
 %initial-action {
@@ -891,8 +897,17 @@ main (void)
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([-o input$1.c input$1.y])
+AT_BISON_CHECK([-o input$1.c input$1.y], [], [],
+[m4_if([$1], [0],
+[[input0.y:27.3-5: warning: useless %destructor for type <*> [-Wother]
+input0.y:27.3-5: warning: useless %printer for type <*> [-Wother]
+]],
+[[input1.y:27.3-4: warning: useless %destructor for type <> [-Wother]
+input1.y:27.3-4: warning: useless %printer for type <> [-Wother]
+]])])
+
 AT_COMPILE([input$1])
+
 AT_PARSER_CHECK([./input$1], 0,
 [[<]]kind[[> for 'E' @ 1.
 <]]kind[[> for 'S' @ 1.
@@ -915,8 +930,10 @@ m4_popdef([kind])
 m4_popdef([not_kind])
 ])
 
-_AT_CHECK_DEFAULT_PRINTER_AND_DESTRUCTOR_FOR_END_TOKEN(0)
-_AT_CHECK_DEFAULT_PRINTER_AND_DESTRUCTOR_FOR_END_TOKEN(1)
+AT_TEST(0)
+AT_TEST(1)
+
+m4_popdef([AT_TEST])
 
 AT_CLEANUP
 
@@ -976,7 +993,10 @@ main (void)
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([-o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y], [], [],
+[[input.y:21.6-8: warning: useless %destructor for type <*> [-Wother]
+input.y:21.6-8: warning: useless %printer for type <*> [-Wother]
+]])
 AT_COMPILE([input])
 AT_PARSER_CHECK([./input], [1], [],
 [[Starting parse
@@ -1075,7 +1095,10 @@ main (void)
 ]])
 AT_BISON_OPTION_POPDEFS
 
-AT_BISON_CHECK([-o input.c input.y])
+AT_BISON_CHECK([-o input.c input.y], [], [],
+[[input.y:22.3-4: warning: useless %destructor for type <> [-Wother]
+input.y:22.3-4: warning: useless %printer for type <> [-Wother]
+]])
 AT_COMPILE([input])
 
 AT_CLEANUP
@@ -1132,8 +1155,10 @@ main (void)
 AT_BISON_OPTION_POPDEFS
 
 AT_BISON_CHECK([-o input.c input.y], 0,,
-[[input.y:33.3-23: warning: unset value: $$
-input.y:30.3-35.37: warning: unused value: $3
+[[input.y:24.70-72: warning: useless %destructor for type <*> [-Wother]
+input.y:24.70-72: warning: useless %printer for type <*> [-Wother]
+input.y:33.3-23: warning: unset value: $$ [-Wother]
+input.y:30.3-35.37: warning: unused value: $3 [-Wother]
 ]])
 
 AT_COMPILE([input])
@@ -1234,10 +1259,11 @@ AT_CHECK_ACTION_LOCATIONS([[%printer]])
 ## Qualified $$ in actions.  ##
 ## ------------------------- ##
 
-# Check that we can used qualified $$ (v.g., $<type>$) not only in
-# rule actions, but also where $$ is valid: %printer and %destructor.
+# Check that we can use qualified $$ (v.g., $<type>$) not only in rule
+# actions, but also where $$ is valid: %destructor/%printer and
+# %initial-action.
 #
-# FIXME: Not actually checking %desctructor, but it's the same code as
+# FIXME: Not actually checking %destructor, but it's the same code as
 # %printer...
 #
 # To do that, use a semantic value that has two fields (sem_type),
@@ -1248,17 +1274,13 @@ AT_CHECK_ACTION_LOCATIONS([[%printer]])
 m4_pushdef([AT_TEST],
 [AT_SETUP([[Qualified $$ in actions: $1]])
 
-AT_BISON_OPTION_PUSHDEFS([%locations %skeleton "$1"])
+AT_BISON_OPTION_PUSHDEFS([%skeleton "$1"])
 
 AT_DATA_GRAMMAR([[input.y]],
 [[%skeleton "$1"
-%defines   // FIXME: Mandated by lalr1.cc in Bison 2.6.
-%locations // FIXME: Mandated by lalr1.cc in Bison 2.6.
 %debug
 %code requires
 {
-# include <stdio.h>
-
   typedef struct sem_type
   {
     int ival;
@@ -1267,20 +1289,21 @@ AT_DATA_GRAMMAR([[input.y]],
 
 # define YYSTYPE sem_type
 
-#ifdef __cplusplus
+]AT_SKEL_CC_IF([[
 # include <iostream>
   static void
   report (std::ostream& yyo, int ival, float fval)
   {
     yyo << "ival: " << ival << ", fval: " <<  fval;
   }
-#else
+]], [[
+# include <stdio.h>
   static void
   report (FILE* yyo, int ival, float fval)
   {
     fprintf (yyo, "ival: %d, fval: %1.1f", ival, fval);
   }
-#endif
+]])[
 }
 
 %code
@@ -1296,22 +1319,11 @@ AT_DATA_GRAMMAR([[input.y]],
 %printer { report (yyo, $<ival>$, $$      ); } <fval>;
 %printer { report (yyo, $<ival>$, $<fval>$); } <>;
 
-]AT_SKEL_CC_IF([[
-/* The lalr1.cc skeleton, for backward compatibility, defines
-   a constructor for position that initializes the filename.  The
-   glr.cc skeleton does not (and in fact cannot: location/position
-   are stored in a union, from which objects with constructors are
-   excluded in C++). */
-%initial-action {
-  @$.initialize ();
+%initial-action
+{
+  $<ival>$ = 42;
+  $<fval>$ = 4.2;
 }
-]])[
-
-// %initial-action
-// {
-//   $<ival>$ = 42;
-//   $<fval>$ = 4.2;
-// }
 
 %%
 float: UNTYPED INT
@@ -1341,10 +1353,7 @@ AT_FULL_COMPILE([[input]])
 AT_PARSER_CHECK([./input], 0, [], [stderr])
 # Don't be too picky on the traces, GLR is not exactly the same.  Keep
 # only the lines from the printer.
-#
-# Don't care about locations.  FIXME: remove their removal when Bison
-# supports C++ without locations.
-AT_CHECK([[sed -ne 's/([-0-9.]*: /(/;/ival:/p' stderr]], 0,
+AT_CHECK([[sed -ne '/ival:/p' stderr]], 0,
 [[Reading a token: Next token is token UNTYPED (ival: 10, fval: 0.1)
 Shifting token UNTYPED (ival: 10, fval: 0.1)
 Reading a token: Next token is token INT (ival: 20, fval: 0.2)
@@ -1382,37 +1391,37 @@ AT_DATA([input.y],
 start: test2 test1 test0 testc;
 
 test2
-: 'a' { semi;                  /* TEST:N:2 */ }
-| 'b' { if (0) {no_semi}       /* TEST:N:2 */ }
-| 'c' { if (0) {semi;}         /* TEST:N:2 */ }
-| 'd' { semi;   no_semi                /* TEST:Y:2 */ }
-| 'e' { semi(); no_semi()      /* TEST:Y:2 */ }
-| 'f' { semi[]; no_semi[]      /* TEST:Y:2 */ }
-| 'g' { semi++; no_semi++      /* TEST:Y:2 */ }
-| 'h' { {no_semi} no_semi      /* TEST:Y:2 */ }
-| 'i' { {semi;}   no_semi      /* TEST:Y:2 */ }
+: 'a' { semi;                   /* TEST:N:2 */ }
+| 'b' { if (0) {no_semi}        /* TEST:N:2 */ }
+| 'c' { if (0) {semi;}          /* TEST:N:2 */ }
+| 'd' { semi;   no_semi         /* TEST:Y:2 */ }
+| 'e' { semi(); no_semi()       /* TEST:Y:2 */ }
+| 'f' { semi[]; no_semi[]       /* TEST:Y:2 */ }
+| 'g' { semi++; no_semi++       /* TEST:Y:2 */ }
+| 'h' { {no_semi} no_semi       /* TEST:Y:2 */ }
+| 'i' { {semi;}   no_semi       /* TEST:Y:2 */ }
 ;
 test1
-  : 'a' { semi;                        // TEST:N:1 ;
-} | 'b' { if (0) {no_semi}     // TEST:N:1 ;
-} | 'c' { if (0) {semi;}       // TEST:N:1 ;
-} | 'd' { semi;   no_semi      // TEST:Y:1 ;
-} | 'e' { semi(); no_semi()    // TEST:Y:1 ;
-} | 'f' { semi[]; no_semi[]    // TEST:Y:1 ;
-} | 'g' { semi++; no_semi++    // TEST:Y:1 ;
-} | 'h' { {no_semi} no_semi    // TEST:Y:1 ;
-} | 'i' { {semi;}   no_semi    // TEST:Y:1 ;
+  : 'a' { semi;                 // TEST:N:1 ;
+} | 'b' { if (0) {no_semi}      // TEST:N:1 ;
+} | 'c' { if (0) {semi;}        // TEST:N:1 ;
+} | 'd' { semi;   no_semi       // TEST:Y:1 ;
+} | 'e' { semi(); no_semi()     // TEST:Y:1 ;
+} | 'f' { semi[]; no_semi[]     // TEST:Y:1 ;
+} | 'g' { semi++; no_semi++     // TEST:Y:1 ;
+} | 'h' { {no_semi} no_semi     // TEST:Y:1 ;
+} | 'i' { {semi;}   no_semi     // TEST:Y:1 ;
 } ;
 test0
-  : 'a' { semi;                        // TEST:N:1 {}
-} | 'b' { if (0) {no_semi}     // TEST:N:1 {}
-} | 'c' { if (0) {semi;}       // TEST:N:1 {}
-} | 'd' { semi;   no_semi      // TEST:Y:1 {}
-} | 'e' { semi(); no_semi()    // TEST:Y:1 {}
-} | 'f' { semi[]; no_semi[]    // TEST:Y:1 {}
-} | 'g' { semi++; no_semi++    // TEST:Y:1 {}
-} | 'h' { {no_semi} no_semi    // TEST:Y:1 {}
-} | 'i' { {semi;}   no_semi    // TEST:Y:1 {}
+  : 'a' { semi;                 // TEST:N:1 {}
+} | 'b' { if (0) {no_semi}      // TEST:N:1 {}
+} | 'c' { if (0) {semi;}        // TEST:N:1 {}
+} | 'd' { semi;   no_semi       // TEST:Y:1 {}
+} | 'e' { semi(); no_semi()     // TEST:Y:1 {}
+} | 'f' { semi[]; no_semi[]     // TEST:Y:1 {}
+} | 'g' { semi++; no_semi++     // TEST:Y:1 {}
+} | 'h' { {no_semi} no_semi     // TEST:Y:1 {}
+} | 'i' { {semi;}   no_semi     // TEST:Y:1 {}
 } ;
 
 testc
@@ -1429,42 +1438,42 @@ string;"}
 AT_BISON_OPTION_POPDEFS
 
 AT_BISON_CHECK([[-o input.c input.y]], [0], [],
-[[input.y:8.48: warning: a ';' might be needed at the end of action code
-input.y:8.48: warning: future versions of Bison will not add the ';'
-input.y:9.48: warning: a ';' might be needed at the end of action code
-input.y:9.48: warning: future versions of Bison will not add the ';'
-input.y:10.48: warning: a ';' might be needed at the end of action code
-input.y:10.48: warning: future versions of Bison will not add the ';'
-input.y:11.48: warning: a ';' might be needed at the end of action code
-input.y:11.48: warning: future versions of Bison will not add the ';'
-input.y:12.48: warning: a ';' might be needed at the end of action code
-input.y:12.48: warning: future versions of Bison will not add the ';'
-input.y:13.48: warning: a ';' might be needed at the end of action code
-input.y:13.48: warning: future versions of Bison will not add the ';'
-input.y:20.1: warning: a ';' might be needed at the end of action code
-input.y:20.1: warning: future versions of Bison will not add the ';'
-input.y:21.1: warning: a ';' might be needed at the end of action code
-input.y:21.1: warning: future versions of Bison will not add the ';'
-input.y:22.1: warning: a ';' might be needed at the end of action code
-input.y:22.1: warning: future versions of Bison will not add the ';'
-input.y:23.1: warning: a ';' might be needed at the end of action code
-input.y:23.1: warning: future versions of Bison will not add the ';'
-input.y:24.1: warning: a ';' might be needed at the end of action code
-input.y:24.1: warning: future versions of Bison will not add the ';'
-input.y:25.1: warning: a ';' might be needed at the end of action code
-input.y:25.1: warning: future versions of Bison will not add the ';'
-input.y:31.1: warning: a ';' might be needed at the end of action code
-input.y:31.1: warning: future versions of Bison will not add the ';'
-input.y:32.1: warning: a ';' might be needed at the end of action code
-input.y:32.1: warning: future versions of Bison will not add the ';'
-input.y:33.1: warning: a ';' might be needed at the end of action code
-input.y:33.1: warning: future versions of Bison will not add the ';'
-input.y:34.1: warning: a ';' might be needed at the end of action code
-input.y:34.1: warning: future versions of Bison will not add the ';'
-input.y:35.1: warning: a ';' might be needed at the end of action code
-input.y:35.1: warning: future versions of Bison will not add the ';'
-input.y:36.1: warning: a ';' might be needed at the end of action code
-input.y:36.1: warning: future versions of Bison will not add the ';'
+[[input.y:8.48: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:8.48: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:9.48: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:9.48: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:10.48: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:10.48: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:11.48: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:11.48: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:12.48: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:12.48: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:13.48: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:13.48: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:20.1: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:20.1: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:21.1: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:21.1: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:22.1: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:22.1: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:23.1: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:23.1: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:24.1: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:24.1: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:25.1: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:25.1: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:31.1: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:31.1: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:32.1: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:32.1: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:33.1: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:33.1: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:34.1: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:34.1: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:35.1: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:35.1: warning: future versions of Bison will not add the ';' [-Wdeprecated]
+input.y:36.1: warning: a ';' might be needed at the end of action code [-Wdeprecated]
+input.y:36.1: warning: future versions of Bison will not add the ';' [-Wdeprecated]
 ]])
 
 AT_MATCHES_CHECK([input.c], [[/\* TEST:N:2 \*/ \}$]],       [[3]])