X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/fa98bb3233f7f291d8efa2565288bc0597f92063..6d58c632025cb6928a90e4176577982bfb9c3981:/tests/input.at diff --git a/tests/input.at b/tests/input.at index ac9be79d..f7f5adfc 100644 --- a/tests/input.at +++ b/tests/input.at @@ -20,6 +20,67 @@ AT_BANNER([[Input Processing.]]) # Mostly test that we are robust to mistakes. +## ---------------- ## +## Invalid inputs. ## +## ---------------- ## + +AT_SETUP([Invalid inputs]) + +AT_DATA([input.y], +[[\000\001\002\377? +%% +? +default: 'a' } +%& +%a-does-not-exist +%- +%{ +]]) +AT_CHECK([[$PERL -pi -e 's/\\(\d{3})/chr(oct($1))/ge' input.y || exit 77]]) + +AT_BISON_CHECK([input.y], [1], [], +[[input.y:1.1: error: invalid character: '\0' +input.y:1.1: error: invalid character: '\001' +input.y:1.1: error: invalid character: '\002' +input.y:1.1: error: invalid character: '\377' +input.y:1.2: error: invalid character: '?' +input.y:3.1: error: invalid character: '?' +input.y:4.14: error: invalid character: '}' +input.y:5.1: error: invalid character: '%' +input.y:5.2: error: invalid character: '&' +input.y:6.1-17: error: invalid directive: '%a-does-not-exist' +input.y:7.1: error: invalid character: '%' +input.y:7.2: error: invalid character: '-' +input.y:8.1-9.0: error: missing '%}' at end of file +input.y:8.1-9.0: error: syntax error, unexpected %{...%} +]]) + +AT_CLEANUP + + +AT_SETUP([Invalid inputs with {}]) + +# We used to SEGV here. See +# http://lists.gnu.org/archive/html/bug-bison/2005-07/msg00053.html + +AT_DATA([input.y], +[[ +%destructor +%initial-action +%lex-param +%parse-param +%printer +%union +]]) + +AT_BISON_CHECK([input.y], [1], [], +[[input.y:3.1-15: error: syntax error, unexpected %initial-action, expecting {...} +]]) + +AT_CLEANUP + + + ## ------------ ## ## Invalid $n. ## ## ------------ ## @@ -1139,15 +1200,15 @@ AT_SETUP([[%define enum variables]]) # Front-end. AT_DATA([[input.y]], -[[%define lr.default-reductions bogus +[[%define lr.default-reduction bogus %% start: ; ]]) AT_BISON_CHECK([[input.y]], [[1]], [[]], -[[input.y:1.9-29: error: invalid value for %define variable 'lr.default-reductions': 'bogus' -input.y:1.9-29: accepted value: 'most' -input.y:1.9-29: accepted value: 'consistent' -input.y:1.9-29: accepted value: 'accepting' +[[input.y:1.9-28: error: invalid value for %define variable 'lr.default-reduction': 'bogus' +input.y:1.9-28: accepted value: 'most' +input.y:1.9-28: accepted value: 'consistent' +input.y:1.9-28: accepted value: 'accepting' ]]) # Back-end. @@ -1159,9 +1220,9 @@ start: ; ]]) AT_BISON_CHECK([[input.y]], [1], [], [[input.y:1.9-21: error: invalid value for %define variable 'api.push-pull': 'neither' -input.y:1.9-21: error: accepted value: 'pull' -input.y:1.9-21: error: accepted value: 'push' -input.y:1.9-21: error: accepted value: 'both' +input.y:1.9-21: accepted value: 'pull' +input.y:1.9-21: accepted value: 'push' +input.y:1.9-21: accepted value: 'both' ]]) AT_CLEANUP @@ -1183,9 +1244,9 @@ start: ; AT_BISON_CHECK([[input.y]], [1], [], [[input.y:1.9-21: warning: deprecated %define variable name: 'api.push_pull', use 'api.push-pull' [-Wdeprecated] input.y:1.9-21: error: invalid value for %define variable 'api.push-pull': 'neither' -input.y:1.9-21: error: accepted value: 'pull' -input.y:1.9-21: error: accepted value: 'push' -input.y:1.9-21: error: accepted value: 'both' +input.y:1.9-21: accepted value: 'pull' +input.y:1.9-21: accepted value: 'push' +input.y:1.9-21: accepted value: 'both' ]]) AT_DATA([[input.y]], @@ -1194,8 +1255,8 @@ AT_DATA([[input.y]], start: ; ]]) AT_BISON_CHECK([[input.y]], [1], [], -[[input.y:1.9-34: warning: deprecated %define variable name: 'lr.keep_unreachable_states', use 'lr.keep-unreachable-states' [-Wdeprecated] -input.y:1.9-34: error: invalid value for %define Boolean variable 'lr.keep-unreachable-states' +[[input.y:1.9-34: warning: deprecated %define variable name: 'lr.keep_unreachable_states', use 'lr.keep-unreachable-state' [-Wdeprecated] +input.y:1.9-34: error: invalid value for %define Boolean variable 'lr.keep-unreachable-state' ]]) AT_DATA([[input.y]], @@ -1321,7 +1382,7 @@ AT_DATA([empty.y], start: ''; start: ' ]]) -AT_CHECK([[perl -e "print 'start: \'';" >> empty.y || exit 77]]) +AT_CHECK([[$PERL -e "print 'start: \'';" >> empty.y || exit 77]]) AT_BISON_CHECK([empty.y], [1], [], [[empty.y:2.8-9: warning: empty character literal [-Wother] @@ -1336,7 +1397,7 @@ AT_DATA([two.y], start: 'ab'; start: 'ab ]]) -AT_CHECK([[perl -e "print 'start: \'ab';" >> two.y || exit 77]]) +AT_CHECK([[$PERL -e "print 'start: \'ab';" >> two.y || exit 77]]) AT_BISON_CHECK([two.y], [1], [], [[two.y:2.8-11: warning: extra characters in character literal [-Wother] @@ -1351,7 +1412,7 @@ AT_DATA([three.y], start: 'abc'; start: 'abc ]]) -AT_CHECK([[perl -e "print 'start: \'abc';" >> three.y || exit 77]]) +AT_CHECK([[$PERL -e "print 'start: \'abc';" >> three.y || exit 77]]) AT_BISON_CHECK([three.y], [1], [], [[three.y:2.8-12: warning: extra characters in character literal [-Wother] @@ -1380,7 +1441,7 @@ start: '\777' '\0' '\xfff' '\x0' # Beside we cannot even expect "echo '\0'" to output two characters # (well three with \n): at least Bash 3.2 converts the two-character # sequence "\0" into a single NUL character. -AT_CHECK([[perl -e 'print "start: \"\\\t\\\f\\\0\\\1\" ;";' >> input.y \ +AT_CHECK([[$PERL -e 'print "start: \"\\\t\\\f\\\0\\\1\" ;";' >> input.y \ || exit 77]]) AT_BISON_CHECK([input.y], [1], [], @@ -1594,3 +1655,121 @@ AT_TEST([@:>@m4_errprintn]) m4_popdef([AT_TEST]) AT_CLEANUP + +##----------------------- ## +## Deprecated directives. ## +## ---------------------- ## + +AT_SETUP([[Deprecated directives]]) + +AT_KEYWORDS([[deprec]]) + +AT_DATA_GRAMMAR([[input.y]], +[[ +%default_prec +%error_verbose +%expect_rr 0 +%file-prefix = "foo" +%file-prefix + = +"bar" +%fixed-output_files +%fixed_output-files +%fixed-output-files +%name-prefix= "foo" +%no-default_prec +%no_default-prec +%no_lines +%output = "foo" +%pure_parser +%token_table +%glr-parser +%% exp : '0' +]]) + +AT_BISON_CHECK([[input.y]], [[0]], [[]], +[[input.y:10.1-13: warning: deprecated directive: '%default_prec', use '%default-prec' [-Wdeprecated] +input.y:11.1-14: warning: deprecated directive: '%error_verbose', use '%define parse.error verbose' [-Wdeprecated] +input.y:12.1-10: warning: deprecated directive: '%expect_rr', use '%expect-rr' [-Wdeprecated] +input.y:13.1-14: warning: deprecated directive: '%file-prefix =', use '%file-prefix' [-Wdeprecated] +input.y:14.1-15.2: warning: deprecated directive: '%file-prefix\n =', use '%file-prefix' [-Wdeprecated] +input.y:17.1-19: warning: deprecated directive: '%fixed-output_files', use '%fixed-output-files' [-Wdeprecated] +input.y:18.1-19: warning: deprecated directive: '%fixed_output-files', use '%fixed-output-files' [-Wdeprecated] +input.y:20.1-13: warning: deprecated directive: '%name-prefix=', use '%name-prefix' [-Wdeprecated] +input.y:21.1-16: warning: deprecated directive: '%no-default_prec', use '%no-default-prec' [-Wdeprecated] +input.y:22.1-16: warning: deprecated directive: '%no_default-prec', use '%no-default-prec' [-Wdeprecated] +input.y:23.1-9: warning: deprecated directive: '%no_lines', use '%no-lines' [-Wdeprecated] +input.y:24.1-9: warning: deprecated directive: '%output =', use '%output' [-Wdeprecated] +input.y:25.1-12: warning: deprecated directive: '%pure_parser', use '%pure-parser' [-Wdeprecated] +input.y:26.1-12: warning: deprecated directive: '%token_table', use '%token-table' [-Wdeprecated] +]]) + +AT_CLEANUP + +## ---------------------------- ## +## Unput's effect on locations. ## +## ---------------------------- ## +dnl When the scanner detects a deprecated construct, it unputs the correct +dnl version, but it should *not* have any impact on the scanner cursor. If it +dnl does, the locations of directives on the same line become erroneous. + +AT_SETUP([[Unput's effect on locations]]) + +AT_KEYWORDS([[deprec]]) + +AT_DATA_GRAMMAR([[input.y]], +[[ +%glr-parser +%expect_rr 42 %expect_rr 42 + %expect_rr 42 +%error_verbose %error_verbose + %error_verbose +%% exp: '0' +]]) + +AT_BISON_CHECK([[input.y]], [[1]], [[]], +[[input.y:11.1-10: warning: deprecated directive: '%expect_rr', use '%expect-rr' [-Wdeprecated] +input.y:11.15-24: warning: deprecated directive: '%expect_rr', use '%expect-rr' [-Wdeprecated] +input.y:12.15-24: warning: deprecated directive: '%expect_rr', use '%expect-rr' [-Wdeprecated] +input.y:13.1-14: warning: deprecated directive: '%error_verbose', use '%define parse.error verbose' [-Wdeprecated] +input.y:13.16-29: warning: deprecated directive: '%error_verbose', use '%define parse.error verbose' [-Wdeprecated] +input.y:13.11-21: error: %define variable 'parse.error' redefined +input.y:13-6: previous definition +input.y:14.16-29: warning: deprecated directive: '%error_verbose', use '%define parse.error verbose' [-Wdeprecated] +input.y:14.11-21: error: %define variable 'parse.error' redefined +input.y:13.11-21: previous definition +]]) + +AT_CLEANUP + +##--------------------------- ## +## Non-deprecated directives. ## +## -------------------------- ## + +AT_SETUP([[Non-deprecated directives]]) + +AT_KEYWORDS([[deprec]]) + +AT_DATA_GRAMMAR([[input.y]], +[[ +%default-prec +%error-verbose +%expect-rr 42 +%file-prefix "foo" +%file-prefix +"bar" +%fixed-output-files +%name-prefix "foo" +%no-default-prec +%no-lines +%output "foo" +%pure-parser +%token-table +%% exp : '0' +]]) + +AT_BISON_CHECK([[input.y]], [[0]], [[]], +[[input.y: warning: %expect-rr applies only to GLR parsers [-Wother] +]]) + +AT_CLEANUP