]> git.saurik.com Git - bison.git/blobdiff - tests/input.at
Warn about character literals not of length one.
[bison.git] / tests / input.at
index c43aeb1ebbb4f98122b3dd517f906cfabf9a8e2e..9c62f9ef6acf1fdf651946e6fd4472de29a653e7 100644 (file)
@@ -675,22 +675,33 @@ AT_CLEANUP
 
 AT_SETUP([Numbered tokens])
 
-AT_DATA_GRAMMAR([input.y],
-[[%token HEXADECIMAL_1 0xabcdef
-           DECIMAL_1 11259375
-%token HEXADECIMAL_2 0XFEDCBA
-           DECIMAL_2 16702650
+AT_DATA_GRAMMAR([1.y],
+[[%token DECIMAL     11259375
+         HEXADECIMAL 0xabcdef
 %%
-start: HEXADECIMAL_1 HEXADECIMAL_2
+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([input.y], [1], [],
-[[input.y:12.12-20: tokens HEXADECIMAL_2 and DECIMAL_2 both assigned number 16702650
-input.y:9.8-20: tokens DECIMAL_1 and HEXADECIMAL_1 both assigned number 11259375
+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([input.y],
+
+AT_DATA_GRAMMAR([3.y],
 [[%token TOO_LARGE_DEC 999999999999999999999
          TOO_LARGE_HEX 0xFFFFFFFFFFFFFFFFFFF
 %%
@@ -698,9 +709,9 @@ start: TOO_LARGE_DEC TOO_LARGE_HEX
 %%
 ]])
 
-AT_BISON_CHECK([input.y], [1], [],
-[[input.y:9.22-42: integer out of range: `999999999999999999999'
-input.y:10.24-44: integer out of range: `0xFFFFFFFFFFFFFFFFFFF'
+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
@@ -1112,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[
 ]])])
 ])
 
@@ -1146,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
+# <http://lists.gnu.org/archive/html/bison-patches/2009-07/msg00019.html>.
+
+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