]> git.saurik.com Git - bison.git/blobdiff - tests/input.at
* TODO (Complaint submessage indentation): New.
[bison.git] / tests / input.at
index 9c62f9ef6acf1fdf651946e6fd4472de29a653e7..ab01cbe8ed8a8c33a9810cab6e811f5da073e0c1 100644 (file)
@@ -675,33 +675,23 @@ AT_CLEANUP
 
 AT_SETUP([Numbered tokens])
 
 
 AT_SETUP([Numbered tokens])
 
-AT_DATA_GRAMMAR([1.y],
-[[%token DECIMAL     11259375
-         HEXADECIMAL 0xabcdef
+AT_DATA_GRAMMAR([redecl.y],
+[[%token DECIMAL_1     11259375
+         HEXADECIMAL_1 0xabcdef
+         HEXADECIMAL_2 0xFEDCBA
+         DECIMAL_2     16702650
 %%
 %%
-start: DECIMAL;
+start: DECIMAL_1 HEXADECIMAL_2;
 ]])
 
 ]])
 
-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_BISON_CHECK([redecl.y], [1], [],
+[[redecl.y:10.10-22: user token number 11259375 redeclaration for HEXADECIMAL_1
+redecl.y:9.8-16: previous declaration for DECIMAL_1
+redecl.y:12.10-18: user token number 16702650 redeclaration for DECIMAL_2
+redecl.y:11.10-22: previous declaration for HEXADECIMAL_2
 ]])
 
 ]])
 
-
-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],
+AT_DATA_GRAMMAR([too-large.y],
 [[%token TOO_LARGE_DEC 999999999999999999999
          TOO_LARGE_HEX 0xFFFFFFFFFFFFFFFFFFF
 %%
 [[%token TOO_LARGE_DEC 999999999999999999999
          TOO_LARGE_HEX 0xFFFFFFFFFFFFFFFFFFF
 %%
@@ -709,9 +699,9 @@ 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_BISON_CHECK([too-large.y], [1], [],
+[[too-large.y:9.22-42: integer out of range: `999999999999999999999'
+too-large.y:10.24-44: integer out of range: `0xFFFFFFFFFFFFFFFFFFF'
 ]])
 
 AT_CLEANUP
 ]])
 
 AT_CLEANUP
@@ -818,11 +808,11 @@ AT_DATA([input-c.y],
 %%
 start: ;
 ]])
 %%
 start: ;
 ]])
-AT_BISON_CHECK([[input-c.y]], [0], [],
-[[input-c.y:1.7: warning: %code qualifier `q' is not used
-input-c.y:2.7-9: warning: %code qualifier `bad' is not used
-input-c.y:3.7-9: warning: %code qualifier `bad' is not used
-input-c.y:4.7-12: warning: %code qualifier `format' is not used
+AT_BISON_CHECK([[input-c.y]], [[1]], [],
+[[input-c.y:1.7: %code qualifier `q' is not used
+input-c.y:2.7-9: %code qualifier `bad' is not used
+input-c.y:3.7-9: %code qualifier `bad' is not used
+input-c.y:4.7-12: %code qualifier `format' is not used
 ]])
 
 AT_DATA([input-c-glr.y],
 ]])
 
 AT_DATA([input-c-glr.y],
@@ -832,10 +822,10 @@ AT_DATA([input-c-glr.y],
 %%
 start: ;
 ]])
 %%
 start: ;
 ]])
-AT_BISON_CHECK([[input-c-glr.y]], [0], [],
-[[input-c-glr.y:1.7: warning: %code qualifier `q' is not used
-input-c-glr.y:2.7-9: warning: %code qualifier `bad' is not used
-input-c-glr.y:3.8-10: warning: %code qualifier `bad' is not used
+AT_BISON_CHECK([[input-c-glr.y]], [[1]], [],
+[[input-c-glr.y:1.7: %code qualifier `q' is not used
+input-c-glr.y:2.7-9: %code qualifier `bad' is not used
+input-c-glr.y:3.8-10: %code qualifier `bad' is not used
 ]])
 
 AT_DATA([input-c++.y],
 ]])
 
 AT_DATA([input-c++.y],
@@ -845,10 +835,10 @@ AT_DATA([input-c++.y],
 %%
 start: ;
 ]])
 %%
 start: ;
 ]])
-AT_BISON_CHECK([[input-c++.y]], [0], [],
-[[input-c++.y:1.7: warning: %code qualifier `q' is not used
-input-c++.y:2.7-9: warning: %code qualifier `bad' is not used
-input-c++.y:3.8: warning: %code qualifier `q' is not used
+AT_BISON_CHECK([[input-c++.y]], [[1]], [],
+[[input-c++.y:1.7: %code qualifier `q' is not used
+input-c++.y:2.7-9: %code qualifier `bad' is not used
+input-c++.y:3.8: %code qualifier `q' is not used
 ]])
 
 AT_DATA([input-c++-glr.y],
 ]])
 
 AT_DATA([input-c++-glr.y],
@@ -858,10 +848,10 @@ AT_DATA([input-c++-glr.y],
 %%
 start: ;
 ]])
 %%
 start: ;
 ]])
-AT_BISON_CHECK([[input-c++-glr.y]], [0], [],
-[[input-c++-glr.y:1.7-9: warning: %code qualifier `bad' is not used
-input-c++-glr.y:2.7: warning: %code qualifier `q' is not used
-input-c++-glr.y:3.7: warning: %code qualifier `q' is not used
+AT_BISON_CHECK([[input-c++-glr.y]], [[1]], [],
+[[input-c++-glr.y:1.7-9: %code qualifier `bad' is not used
+input-c++-glr.y:2.7: %code qualifier `q' is not used
+input-c++-glr.y:3.7: %code qualifier `q' is not used
 ]])
 
 AT_DATA([special-char-@@.y],
 ]])
 
 AT_DATA([special-char-@@.y],
@@ -871,10 +861,10 @@ AT_DATA([special-char-@@.y],
 %%
 start: ;
 ]])
 %%
 start: ;
 ]])
-AT_BISON_CHECK([[special-char-@@.y]], [0], [],
-[[special-char-@@.y:1.7-9: warning: %code qualifier `bad' is not used
-special-char-@@.y:2.7: warning: %code qualifier `q' is not used
-special-char-@@.y:3.7: warning: %code qualifier `q' is not used
+AT_BISON_CHECK([[special-char-@@.y]], [[1]], [],
+[[special-char-@@.y:1.7-9: %code qualifier `bad' is not used
+special-char-@@.y:2.7: %code qualifier `q' is not used
+special-char-@@.y:3.7: %code qualifier `q' is not used
 ]])
 
 AT_DATA([special-char-@:>@.y],
 ]])
 
 AT_DATA([special-char-@:>@.y],
@@ -884,10 +874,10 @@ AT_DATA([special-char-@:>@.y],
 %%
 start: ;
 ]])
 %%
 start: ;
 ]])
-AT_BISON_CHECK([[special-char-@:>@.y]], [0], [],
-[[special-char-@:>@.y:1.7-9: warning: %code qualifier `bad' is not used
-special-char-@:>@.y:2.7: warning: %code qualifier `q' is not used
-special-char-@:>@.y:3.7: warning: %code qualifier `q' is not used
+AT_BISON_CHECK([[special-char-@:>@.y]], [[1]], [],
+[[special-char-@:>@.y:1.7-9: %code qualifier `bad' is not used
+special-char-@:>@.y:2.7: %code qualifier `q' is not used
+special-char-@:>@.y:3.7: %code qualifier `q' is not used
 ]])
 
 AT_CLEANUP
 ]])
 
 AT_CLEANUP
@@ -922,8 +912,8 @@ AT_DATA([input-unused.y],
 start: ;
 ]])
 
 start: ;
 ]])
 
-AT_BISON_CHECK([[input-unused.y]], [[0]], [],
-[[input-unused.y:1.9-11: warning: %define variable `var' is not used
+AT_BISON_CHECK([[input-unused.y]], [[1]], [],
+[[input-unused.y:1.9-11: %define variable `var' is not used
 ]])
 
 AT_CLEANUP
 ]])
 
 AT_CLEANUP
@@ -933,9 +923,9 @@ AT_CLEANUP
 ## %define, --define, --force-define.  ##
 ## ----------------------------------- ##
 
 ## %define, --define, --force-define.  ##
 ## ----------------------------------- ##
 
-AT_SETUP([%define, --define, --force-define])
+AT_SETUP([[%define, --define, --force-define]])
 
 
-AT_DATA([skel.c],
+AT_DATA([[skel.c]],
 [[m4@&t@_divert_push(0)@
 @output(b4_parser_file_name@)@
 [var-dd: ]b4_percent_define_get([[var-dd]])[
 [[m4@&t@_divert_push(0)@
 @output(b4_parser_file_name@)@
 [var-dd: ]b4_percent_define_get([[var-dd]])[
@@ -944,23 +934,16 @@ var-dfg: ]b4_percent_define_get([[var-dfg]])[
 var-fd: ]b4_percent_define_get([[var-fd]])
 m4@&t@_divert_pop(0)
 ]])
 var-fd: ]b4_percent_define_get([[var-fd]])
 m4@&t@_divert_pop(0)
 ]])
-
-AT_DATA([input.y],
+AT_DATA([[input.y]],
 [[%define var-dfg "gram"
 %%
 start: ;
 ]])
 [[%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   \
 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]], [],
-[[<command line>:10: warning: %define variable `unused-d' is not used
-<command line>:11: warning: %define variable `unused-f' is not used
-]])
-
+                 --skeleton ./skel.c input.y]])
 AT_CHECK([[cat input.tab.c]], [[0]],
 [[var-dd: cmd-d2
 var-ff: cmd-f2
 AT_CHECK([[cat input.tab.c]], [[0]],
 [[var-dd: cmd-d2
 var-ff: cmd-f2
@@ -968,17 +951,25 @@ var-dfg: cmd-f
 var-fd: cmd-d
 ]])
 
 var-fd: cmd-d
 ]])
 
-AT_DATA([input-dg.y],
+AT_DATA([[input-dg.y]],
 [[%define var "gram"
 %%
 start: ;
 ]])
 [[%define var "gram"
 %%
 start: ;
 ]])
-
 AT_BISON_CHECK([[-Dvar=cmd-d input-dg.y]], [[1]], [],
 [[input-dg.y:1.9-11: %define variable `var' redefined
 <command line>:2: previous definition
 ]])
 
 AT_BISON_CHECK([[-Dvar=cmd-d input-dg.y]], [[1]], [],
 [[input-dg.y:1.9-11: %define variable `var' redefined
 <command line>:2: previous definition
 ]])
 
+AT_DATA([[input-unused.y]],
+[[%%
+start: ;
+]])
+AT_BISON_CHECK([[-Dunused-d -Funused-f input-unused.y]], [[1]], [],
+[[<command line>:2: %define variable `unused-d' is not used
+<command line>:3: %define variable `unused-f' is not used
+]])
+
 AT_CLEANUP
 
 ## --------------------------- ##
 AT_CLEANUP
 
 ## --------------------------- ##
@@ -1009,7 +1000,7 @@ AT_SETUP([[%define enum variables]])
 
 # Front-end.
 AT_DATA([[input.y]],
 
 # Front-end.
 AT_DATA([[input.y]],
-[[%define lr.default-reductions "bogus"
+[[%define lr.default-reductions bogus
 %%
 start: ;
 ]])
 %%
 start: ;
 ]])
@@ -1022,7 +1013,7 @@ input.y:1.9-29: accepted value: `accepting'
 
 # Back-end.
 AT_DATA([[input.y]],
 
 # Back-end.
 AT_DATA([[input.y]],
-[[%define api.push-pull "neither"
+[[%define api.push-pull neither
 %%
 start: ;
 ]])
 %%
 start: ;
 ]])
@@ -1057,7 +1048,7 @@ input.y:1.9-21: accepted value: `both'
 ]])
 
 AT_DATA([[input.y]],
 ]])
 
 AT_DATA([[input.y]],
-[[%define lr.keep_unreachable_states "maybe"
+[[%define lr.keep_unreachable_states maybe
 %%
 start: ;
 ]])
 %%
 start: ;
 ]])
@@ -1065,13 +1056,24 @@ AT_BISON_CHECK([[input.y]], [1], [],
 [[input.y:1.9-34: invalid value for %define Boolean variable `lr.keep-unreachable-states'
 ]])
 
 [[input.y:1.9-34: invalid value for %define Boolean variable `lr.keep-unreachable-states'
 ]])
 
+AT_DATA([[input.y]],
+[[%define namespace "foo"
+%define api.namespace "foo"
+%%
+start: ;
+]])
+AT_BISON_CHECK([[input.y]], [1], [],
+[[input.y:2.9-21: %define variable `api.namespace' redefined
+input.y:1.9-17: previous definition
+]])
+
 AT_DATA([[input.y]],
 [[%define foo_bar "baz"
 %%
 start: ;
 ]])
 AT_DATA([[input.y]],
 [[%define foo_bar "baz"
 %%
 start: ;
 ]])
-AT_BISON_CHECK([[input.y]], [0], [],
-[[input.y:1.9-15: warning: %define variable `foo_bar' is not used
+AT_BISON_CHECK([[input.y]], [[1]], [],
+[[input.y:1.9-15: %define variable `foo_bar' is not used
 ]])
 
 AT_CLEANUP
 ]])
 
 AT_CLEANUP
@@ -1095,17 +1097,17 @@ AT_DATA([[input.y]],
 start: ;
 ]])
 
 start: ;
 ]])
 
-AT_BISON_CHECK([[input.y]], [0], [],
-[[input.y:1.9-16: warning: %define variable `api.pure' is not used
+AT_BISON_CHECK([[input.y]], [[1]], [],
+[[input.y:1.9-16: %define variable `api.pure' is not used
 ]])
 ])
 
 AT_CHECK_API_PURE([[%language "c++" %defines]], [[]])
 ]])
 ])
 
 AT_CHECK_API_PURE([[%language "c++" %defines]], [[]])
-AT_CHECK_API_PURE([[%language "c++" %defines]], [["false"]])
+AT_CHECK_API_PURE([[%language "c++" %defines]], [[false]])
 AT_CHECK_API_PURE([[%language "c++" %defines %glr-parser]], [[""]])
 AT_CHECK_API_PURE([[%language "c++" %defines %glr-parser]], [[""]])
-AT_CHECK_API_PURE([[%language "c++" %defines %glr-parser]], [["false"]])
-AT_CHECK_API_PURE([[%language "java"]], [["true"]])
-AT_CHECK_API_PURE([[%language "java"]], [["false"]])
+AT_CHECK_API_PURE([[%language "c++" %defines %glr-parser]], [[false]])
+AT_CHECK_API_PURE([[%language "java"]], [[true]])
+AT_CHECK_API_PURE([[%language "java"]], [[false]])
 
 AT_CLEANUP
 
 
 AT_CLEANUP
 
@@ -1165,10 +1167,8 @@ AT_CLEANUP
 # Bison used to accept character literals that were empty or contained
 # too many characters.
 
 # 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
+# FIXME: AT_DATA or some variant of AT_DATA may eventually permit
+# the final newline to be omitted.  See the threads starting at
 # <http://lists.gnu.org/archive/html/bison-patches/2009-07/msg00019.html>.
 
 AT_SETUP([[Bad character literals]])
 # <http://lists.gnu.org/archive/html/bison-patches/2009-07/msg00019.html>.
 
 AT_SETUP([[Bad character literals]])
@@ -1178,7 +1178,7 @@ AT_DATA([empty.y],
 start: '';
 start: '
 ]])
 start: '';
 start: '
 ]])
-echo $ECHO_N "start: '$ECHO_C" >> empty.y
+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
 
 AT_BISON_CHECK([empty.y], [1], [],
 [[empty.y:2.8-9: warning: empty character literal
@@ -1193,7 +1193,7 @@ AT_DATA([two.y],
 start: 'ab';
 start: 'ab
 ]])
 start: 'ab';
 start: 'ab
 ]])
-echo $ECHO_N "start: 'ab$ECHO_C" >> two.y
+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
 
 AT_BISON_CHECK([two.y], [1], [],
 [[two.y:2.8-11: warning: extra characters in character literal
@@ -1208,7 +1208,7 @@ AT_DATA([three.y],
 start: 'abc';
 start: 'abc
 ]])
 start: 'abc';
 start: 'abc
 ]])
-echo $ECHO_N "start: 'abc$ECHO_C" >> three.y
+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
 
 AT_BISON_CHECK([three.y], [1], [],
 [[three.y:2.8-12: warning: extra characters in character literal
@@ -1219,3 +1219,52 @@ three.y:4.8-11: missing `'' at end of file
 ]])
 
 AT_CLEANUP
 ]])
 
 AT_CLEANUP
+
+## ------------------------- ##
+## Bad escapes in literals.  ##
+## ------------------------- ##
+
+AT_SETUP([[Bad escapes in literals]])
+
+AT_DATA([input.y],
+[[%%
+start: '\777' '\0' '\xfff' '\x0'
+       '\uffff' '\u0000' '\Uffffffff' '\U00000000'
+       '\ ' '\A';
+]])
+
+# It is not easy to create special characters, we cannot even trust tr.
+# 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 \
+           || exit 77]])
+
+AT_BISON_CHECK([input.y], [1], [],
+[[input.y:2.9-12: invalid number after \-escape: 777
+input.y:2.8-13: warning: empty character literal
+input.y:2.16-17: invalid number after \-escape: 0
+input.y:2.15-18: warning: empty character literal
+input.y:2.21-25: invalid number after \-escape: xfff
+input.y:2.20-26: warning: empty character literal
+input.y:2.29-31: invalid number after \-escape: x0
+input.y:2.28-32: warning: empty character literal
+input.y:3.9-14: invalid number after \-escape: uffff
+input.y:3.8-15: warning: empty character literal
+input.y:3.18-23: invalid number after \-escape: u0000
+input.y:3.17-24: warning: empty character literal
+input.y:3.27-36: invalid number after \-escape: Uffffffff
+input.y:3.26-37: warning: empty character literal
+input.y:3.40-49: invalid number after \-escape: U00000000
+input.y:3.39-50: warning: empty character literal
+input.y:4.9-10: invalid character after \-escape: ` '
+input.y:4.8-11: warning: empty character literal
+input.y:4.14-15: invalid character after \-escape: A
+input.y:4.13-16: warning: empty character literal
+input.y:5.9-16: invalid character after \-escape: \t
+input.y:5.17: invalid character after \-escape: \f
+input.y:5.18: invalid character after \-escape: \0
+input.y:5.19: invalid character after \-escape: \001
+]])
+
+AT_CLEANUP