X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/da730230ce159265f4380daa456e3e3c5f9422f4..31d3e510949227d55ed7e87c793b3ec571dffec3:/tests/actions.at?ds=inline diff --git a/tests/actions.at b/tests/actions.at index 602eac8c..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 @@ -367,11 +367,7 @@ main (int argc, const char *argv[]) } ]]) -AT_LALR1_CC_IF( - [AT_BISON_CHECK([-o input.cc input.y]) - AT_COMPILE_CXX([input])], - [AT_BISON_CHECK([-o input.c input.y]) - AT_COMPILE([input])]) +AT_FULL_COMPILE([input]) # Check the location of "empty" @@ -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