X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/f16b08196c780556cbf50691e2944960aebc46f6..31d3e510949227d55ed7e87c793b3ec571dffec3:/tests/actions.at diff --git a/tests/actions.at b/tests/actions.at index e17f7003..841ae392 100644 --- a/tests/actions.at +++ b/tests/actions.at @@ -1,5 +1,5 @@ # Executing Actions. -*- Autotest -*- -# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software +# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software # Foundation, Inc. # This program is free software: you can redistribute it and/or modify @@ -74,7 +74,7 @@ main (void) } ]]) -AT_CHECK([bison -d -v -o input.c input.y]) +AT_BISON_CHECK([-d -v -o input.c input.y]) AT_COMPILE([input]) AT_PARSER_CHECK([./input], 0, [[0123456789 @@ -152,7 +152,7 @@ main (void) } ]]) -AT_CHECK([bison -d -v -o input.c input.y], 0) +AT_BISON_CHECK([-d -v -o input.c input.y], 0) AT_COMPILE([input]) AT_PARSER_CHECK([./input], 0, [[15 @@ -367,11 +367,7 @@ main (int argc, const char *argv[]) } ]]) -AT_LALR1_CC_IF( - [AT_CHECK([bison -o input.cc input.y]) - AT_COMPILE_CXX([input])], - [AT_CHECK([bison -o input.c input.y]) - AT_COMPILE([input])]) +AT_FULL_COMPILE([input]) # Check the location of "empty" @@ -663,7 +659,7 @@ main (void) } ]]) -AT_CHECK([bison -o input.c input.y]) +AT_BISON_CHECK([-o input.c input.y]) AT_COMPILE([input]) AT_PARSER_CHECK([./input], 1, [[<> destructor for 'd' @ 4. @@ -788,7 +784,7 @@ main (void) } ]]) -AT_CHECK([bison -o input.c input.y]) +AT_BISON_CHECK([-o input.c input.y]) AT_COMPILE([input]) AT_PARSER_CHECK([./input], 1, [[<*>//e destructor. @@ -923,7 +919,7 @@ main (void) } ]]) -AT_CHECK([bison -o input$1.c input$1.y]) +AT_BISON_CHECK([-o input$1.c input$1.y]) AT_COMPILE([input$1]) AT_PARSER_CHECK([./input$1], 0, [[<]]kind[[> for 'E' @ 1. @@ -1023,7 +1019,7 @@ main (void) } ]]) -AT_CHECK([bison -o input.c input.y]) +AT_BISON_CHECK([-o input.c input.y]) AT_COMPILE([input]) AT_PARSER_CHECK([./input], [1], [], [[Starting parse @@ -1134,7 +1130,7 @@ main (void) } ]]) -AT_CHECK([bison -o input.c input.y]) +AT_BISON_CHECK([-o input.c input.y]) AT_COMPILE([input]) AT_CLEANUP @@ -1202,7 +1198,7 @@ main (void) } ]]) -AT_CHECK([bison -o input.c input.y], 0,, +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 ]]) @@ -1296,7 +1292,7 @@ main (void) } ]]) -AT_CHECK([[bison -o input.c input.y]]) +AT_BISON_CHECK([[-o input.c input.y]]) AT_COMPILE([[input]]) AT_CLEANUP]) @@ -1304,3 +1300,111 @@ AT_CLEANUP]) AT_CHECK_ACTION_LOCATIONS([[%initial-action]]) AT_CHECK_ACTION_LOCATIONS([[%destructor]]) AT_CHECK_ACTION_LOCATIONS([[%printer]]) + + +## ----------------------------------------------- ## +## Fix user actions without a trailing semicolon. ## +## ----------------------------------------------- ## + +AT_SETUP([[Fix user actions without a trailing semicolon]]) + +# This feature is undocumented, but we accidentally broke it in 2.3a, +# and there was a complaint at: +# . + +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 */ } +; +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 ; +} ; +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 {} +} ; + +testc +: 'a' { +#define TEST_MACRO_N \ +[]"broken\" $ @ $$ @$ [];\ +string;"} +| 'b' { +no_semi +#define TEST_MACRO_N \ +[]"broken\" $ @ $$ @$ [];\ +string;"} +]]) + +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 `;' +]]) + +AT_MATCHES_CHECK([input.c], [[/\* TEST:N:2 \*/ \}$]], [[3]]) +AT_MATCHES_CHECK([input.c], [[/\* TEST:Y:2 \*/ ;\}$]], [[6]]) +AT_MATCHES_CHECK([input.c], [[// TEST:N:1 [;{}]*\n\}$]], [[6]]) +AT_MATCHES_CHECK([input.c], [[// TEST:Y:1 [;{}]*\n;\}$]], [[12]]) +AT_MATCHES_CHECK([input.c], [[#define TEST_MACRO_N \\\n\[\]"broken\\" \$ \@ \$\$ \@\$ \[\];\\\nstring;"\}]], [[2]]) + +AT_CLEANUP