X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/84a1cb5ad0f8b741d5a891df9bbf51bd1cc44ac3..3208e3f4d9aff080a546685560536336f0852bcb:/tests/input.at?ds=inline diff --git a/tests/input.at b/tests/input.at index 43f72962..9c62f9ef 100644 --- a/tests/input.at +++ b/tests/input.at @@ -669,6 +669,54 @@ AT_BISON_CHECK([-o input.c input.y], [1], [], AT_CLEANUP +## ----------------- ## +## Numbered tokens. ## +## ----------------- ## + +AT_SETUP([Numbered tokens]) + +AT_DATA_GRAMMAR([1.y], +[[%token DECIMAL 11259375 + HEXADECIMAL 0xabcdef +%% +start: DECIMAL; +]]) + +AT_BISON_CHECK([1.y], [1], [], +[[1.y:10.10-20: user token number 11259375 redeclaration for HEXADECIMAL +1.y:9.8-14: previous declaration for DECIMAL +]]) + + +AT_DATA_GRAMMAR([2.y], +[[%token HEXADECIMAL 0xabcdef + DECIMAL 11259375 +%% +start: HEXADECIMAL; +]]) + +AT_BISON_CHECK([2.y], [1], [], +[[2.y:10.10-16: user token number 11259375 redeclaration for DECIMAL +2.y:9.8-18: previous declaration for HEXADECIMAL +]]) + + +AT_DATA_GRAMMAR([3.y], +[[%token TOO_LARGE_DEC 999999999999999999999 + TOO_LARGE_HEX 0xFFFFFFFFFFFFFFFFFFF +%% +start: TOO_LARGE_DEC TOO_LARGE_HEX +%% +]]) + +AT_BISON_CHECK([3.y], [1], [], +[[3.y:9.22-42: integer out of range: `999999999999999999999' +3.y:10.24-44: integer out of range: `0xFFFFFFFFFFFFFFFFFFF' +]]) + +AT_CLEANUP + + ## --------------------- ## ## Unclosed constructs. ## ## --------------------- ## @@ -851,7 +899,7 @@ AT_CLEANUP AT_SETUP([%define errors]) -AT_DATA([input.y], +AT_DATA([input-redefined.y], [[%define var "value1" %define var "value1" %define var "value2" @@ -861,42 +909,74 @@ AT_DATA([input.y], start: ; ]]) -AT_BISON_CHECK([[input.y]], [0], [], -[[input.y:2.9-11: warning: %define variable `var' redefined -input.y:1.9-11: warning: previous definition -input.y:3.10-12: warning: %define variable `var' redefined -input.y:2.9-11: warning: previous definition -input.y:1.9-11: warning: %define variable `var' is not used -input.y:2.9-11: warning: %define variable `var' is not used -input.y:3.10-12: warning: %define variable `var' is not used -input.y:4.9-16: warning: %define variable `special1' is not used -input.y:5.9-16: warning: %define variable `special2' is not used +AT_BISON_CHECK([[input-redefined.y]], [[1]], [], +[[input-redefined.y:2.9-11: %define variable `var' redefined +input-redefined.y:1.9-11: previous definition +input-redefined.y:3.10-12: %define variable `var' redefined +input-redefined.y:2.9-11: previous definition +]]) + +AT_DATA([input-unused.y], +[[%define var "value" +%% +start: ; +]]) + +AT_BISON_CHECK([[input-unused.y]], [[0]], [], +[[input-unused.y:1.9-11: warning: %define variable `var' is not used ]]) AT_CLEANUP -## ------------------- ## -## %define, --define. ## -## ------------------- ## +## ----------------------------------- ## +## %define, --define, --force-define. ## +## ----------------------------------- ## -AT_SETUP([%define, --define]) +AT_SETUP([%define, --define, --force-define]) + +AT_DATA([skel.c], +[[m4@&t@_divert_push(0)@ +@output(b4_parser_file_name@)@ +[var-dd: ]b4_percent_define_get([[var-dd]])[ +var-ff: ]b4_percent_define_get([[var-ff]])[ +var-dfg: ]b4_percent_define_get([[var-dfg]])[ +var-fd: ]b4_percent_define_get([[var-fd]]) +m4@&t@_divert_pop(0) +]]) AT_DATA([input.y], -[[%define var "value1" +[[%define var-dfg "gram" +%% +start: ; +]]) + +AT_BISON_CHECK([[-Dvar-dd=cmd-d1 -Dvar-dd=cmd-d2 \ + -Fvar-ff=cmd-f1 -Fvar-ff=cmd-f2 \ + -Dvar-dfg=cmd-d -Fvar-dfg=cmd-f \ + -Fvar-fd=cmd-f -Dvar-fd=cmd-d \ + -Dunused-d -Funused-f \ + --skeleton ./skel.c input.y]], [[0]], [], +[[:10: warning: %define variable `unused-d' is not used +:11: warning: %define variable `unused-f' is not used +]]) + +AT_CHECK([[cat input.tab.c]], [[0]], +[[var-dd: cmd-d2 +var-ff: cmd-f2 +var-dfg: cmd-f +var-fd: cmd-d +]]) + +AT_DATA([input-dg.y], +[[%define var "gram" %% start: ; ]]) -AT_BISON_CHECK([[-DFOO -DFOO -Dvar=value input.y]], [0], [], -[[:3: warning: %define variable `FOO' redefined -:2: warning: previous definition -input.y:1.9-11: warning: %define variable `var' redefined -:4: warning: previous definition -:2: warning: %define variable `FOO' is not used -:3: warning: %define variable `FOO' is not used -:4: warning: %define variable `var' is not used -input.y:1.9-11: warning: %define variable `var' is not used +AT_BISON_CHECK([[-Dvar=cmd-d input-dg.y]], [[1]], [], +[[input-dg.y:1.9-11: %define variable `var' redefined +:2: previous definition ]]) AT_CLEANUP @@ -1043,14 +1123,14 @@ m4_define([AT_CHECK_NAMESPACE_ERROR], AT_DATA([[input.y]], [[%language "C++" %defines -%define namespace "]$1[" +%define api.namespace "]$1[" %% start: ; ]]) AT_BISON_CHECK([[input.y]], [1], [], [m4_foreach([b4_arg], m4_dquote(m4_shift($@)), -[[input.y:3.9-17: ]b4_arg[ +[[input.y:3.9-21: ]b4_arg[ ]])]) ]) @@ -1077,3 +1157,65 @@ AT_CHECK_NAMESPACE_ERROR([[::]], [[namespace reference has a trailing "::"]]) AT_CLEANUP + +## ------------------------ ## +## Bad character literals. ## +## ------------------------ ## + +# Bison used to accept character literals that were empty or contained +# too many characters. + +# FIXME: $ECHO_N and $ECHO_C are not very portable according to the +# Autoconf manual. Switch to AS_ECHO_N when Autoconf 2.64 is released? +# Even better, AT_DATA or some variant of AT_DATA may eventually permit +# a trailing newline. See the threads starting at +# . + +AT_SETUP([[Bad character literals]]) + +AT_DATA([empty.y], +[[%% +start: ''; +start: ' +]]) +echo $ECHO_N "start: '$ECHO_C" >> empty.y + +AT_BISON_CHECK([empty.y], [1], [], +[[empty.y:2.8-9: warning: empty character literal +empty.y:3.8-4.0: warning: empty character literal +empty.y:3.8-4.0: missing `'' at end of line +empty.y:4.8: warning: empty character literal +empty.y:4.8: missing `'' at end of file +]]) + +AT_DATA([two.y], +[[%% +start: 'ab'; +start: 'ab +]]) +echo $ECHO_N "start: 'ab$ECHO_C" >> two.y + +AT_BISON_CHECK([two.y], [1], [], +[[two.y:2.8-11: warning: extra characters in character literal +two.y:3.8-4.0: warning: extra characters in character literal +two.y:3.8-4.0: missing `'' at end of line +two.y:4.8-10: warning: extra characters in character literal +two.y:4.8-10: missing `'' at end of file +]]) + +AT_DATA([three.y], +[[%% +start: 'abc'; +start: 'abc +]]) +echo $ECHO_N "start: 'abc$ECHO_C" >> three.y + +AT_BISON_CHECK([three.y], [1], [], +[[three.y:2.8-12: warning: extra characters in character literal +three.y:3.8-4.0: warning: extra characters in character literal +three.y:3.8-4.0: missing `'' at end of line +three.y:4.8-11: warning: extra characters in character literal +three.y:4.8-11: missing `'' at end of file +]]) + +AT_CLEANUP