X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/08cc1a3b1801cafcd0354ce10161571fa45b4553..75fbe357c896d84b9dedff98c8b0d43ca536bc95:/tests/input.at diff --git a/tests/input.at b/tests/input.at index aec855d7..895ec202 100644 --- a/tests/input.at +++ b/tests/input.at @@ -1,6 +1,6 @@ # Checking the Bison scanner. -*- Autotest -*- -# Copyright (C) 2002-2013 Free Software Foundation, Inc. +# Copyright (C) 2002-2015 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -336,104 +336,67 @@ AT_CLEANUP AT_SETUP([Default %printer and %destructor redeclared]) -AT_DATA([[input.y]], -[[%destructor { destroy ($$); } <*> <*> -%printer { print ($$); } <*> <*> - -%destructor { destroy ($$); } <*> -%printer { print ($$); } <*> - -%destructor { destroy ($$); } <> <> -%printer { print ($$); } <> <> +# AT_TEST([*]) +# ------------ +m4_pushdef([AT_TEST], +[AT_DATA([[input.y]], +[[%destructor { destroy ($$); } <$1> <$1> +%printer { print ($$); } <$1> <$1> -%destructor { destroy ($$); } <> -%printer { print ($$); } <> +%destructor { destroy ($$); } <$1> +%printer { print ($$); } <$1> %% start: %empty; -%destructor { destroy ($$); } <*>; -%printer { print ($$); } <*>; - -%destructor { destroy ($$); } <>; -%printer { print ($$); } <>; +%destructor { destroy ($$); } <$1>; +%printer { print ($$); } <$1>; ]]) AT_BISON_CHECK([-fcaret input.y], [1], [], -[[input.y:1.13-29: error: %destructor redeclaration for <*> - %destructor { destroy ($$); } <*> <*> - ^^^^^^^^^^^^^^^^^ -input.y:1.13-29: previous declaration - %destructor { destroy ($$); } <*> <*> - ^^^^^^^^^^^^^^^^^ -input.y:2.10-24: error: %printer redeclaration for <*> - %printer { print ($$); } <*> <*> - ^^^^^^^^^^^^^^^ -input.y:2.10-24: previous declaration - %printer { print ($$); } <*> <*> - ^^^^^^^^^^^^^^^ -input.y:4.13-29: error: %destructor redeclaration for <*> - %destructor { destroy ($$); } <*> - ^^^^^^^^^^^^^^^^^ -input.y:1.13-29: previous declaration - %destructor { destroy ($$); } <*> <*> - ^^^^^^^^^^^^^^^^^ -input.y:5.10-24: error: %printer redeclaration for <*> - %printer { print ($$); } <*> - ^^^^^^^^^^^^^^^ -input.y:2.10-24: previous declaration - %printer { print ($$); } <*> <*> - ^^^^^^^^^^^^^^^ -input.y:7.13-29: error: %destructor redeclaration for <> +[[input.y:1.13-29: error: %destructor redeclaration for <> %destructor { destroy ($$); } <> <> ^^^^^^^^^^^^^^^^^ -input.y:7.13-29: previous declaration +input.y:1.13-29: previous declaration %destructor { destroy ($$); } <> <> ^^^^^^^^^^^^^^^^^ -input.y:8.10-24: error: %printer redeclaration for <> +input.y:2.10-24: error: %printer redeclaration for <> %printer { print ($$); } <> <> ^^^^^^^^^^^^^^^ -input.y:8.10-24: previous declaration +input.y:2.10-24: previous declaration %printer { print ($$); } <> <> ^^^^^^^^^^^^^^^ -input.y:10.13-29: error: %destructor redeclaration for <> +input.y:4.13-29: error: %destructor redeclaration for <> %destructor { destroy ($$); } <> ^^^^^^^^^^^^^^^^^ -input.y:7.13-29: previous declaration +input.y:1.13-29: previous declaration %destructor { destroy ($$); } <> <> ^^^^^^^^^^^^^^^^^ -input.y:11.10-24: error: %printer redeclaration for <> +input.y:5.10-24: error: %printer redeclaration for <> %printer { print ($$); } <> ^^^^^^^^^^^^^^^ -input.y:8.10-24: previous declaration +input.y:2.10-24: previous declaration %printer { print ($$); } <> <> ^^^^^^^^^^^^^^^ -input.y:17.13-29: error: %destructor redeclaration for <*> - %destructor { destroy ($$); } <*>; - ^^^^^^^^^^^^^^^^^ -input.y:4.13-29: previous declaration - %destructor { destroy ($$); } <*> - ^^^^^^^^^^^^^^^^^ -input.y:18.10-24: error: %printer redeclaration for <*> - %printer { print ($$); } <*>; - ^^^^^^^^^^^^^^^ -input.y:5.10-24: previous declaration - %printer { print ($$); } <*> - ^^^^^^^^^^^^^^^ -input.y:20.13-29: error: %destructor redeclaration for <> +input.y:11.13-29: error: %destructor redeclaration for <> %destructor { destroy ($$); } <>; ^^^^^^^^^^^^^^^^^ -input.y:10.13-29: previous declaration - %destructor { destroy ($$); } <> +input.y:1.13-29: previous declaration + %destructor { destroy ($$); } <> <> ^^^^^^^^^^^^^^^^^ -input.y:21.10-24: error: %printer redeclaration for <> +input.y:12.10-24: error: %printer redeclaration for <> %printer { print ($$); } <>; ^^^^^^^^^^^^^^^ -input.y:11.10-24: previous declaration - %printer { print ($$); } <> +input.y:2.10-24: previous declaration + %printer { print ($$); } <> <> ^^^^^^^^^^^^^^^ ]]) +]) + +AT_TEST([], [], []) +AT_TEST([], [*], [*]) +m4_popdef([AT_TEST]) AT_CLEANUP @@ -463,17 +426,17 @@ AT_BISON_CHECK([input.y], [1], [], [[input.y:4.13-29: error: %destructor redeclaration for input.y:1.13-29: previous declaration input.y:4.13-29: error: %destructor redeclaration for -input.y:4.13-29: previous declaration +input.y:1.13-29: previous declaration input.y:5.10-24: error: %printer redeclaration for input.y:2.10-24: previous declaration input.y:5.10-24: error: %printer redeclaration for -input.y:5.10-24: previous declaration +input.y:2.10-24: previous declaration input.y:11.13-29: error: %destructor redeclaration for input.y:1.13-29: previous declaration input.y:11.13-29: error: %destructor redeclaration for -input.y:4.13-29: previous declaration +input.y:1.13-29: previous declaration input.y:12.10-24: error: %printer redeclaration for -input.y:5.10-24: previous declaration +input.y:2.10-24: previous declaration input.y:12.10-24: error: %printer redeclaration for input.y:2.10-24: previous declaration ]]) @@ -691,50 +654,118 @@ AT_CLEANUP AT_SETUP([Incompatible Aliases]) -AT_DATA([input.y], -[[%token foo "foo" +m4_pushdef([AT_TEST], +[AT_DATA([input.y], [$1]) +AT_BISON_CHECK([-fcaret input.y], [1], [], [$2]) +]) -%type foo -%printer {bar} foo -%destructor {bar} foo -%left foo +# Use the string-alias first to check the order between "first +# declaration" and second. -%type "foo" -%printer {baz} "foo" -%destructor {baz} "foo" -%left "foo" +AT_TEST([[%token foo "foo" +%type "foo" +%type foo +%% +exp: foo; +]], +[[input.y:3.7-11: error: %type redeclaration for foo + %type foo + ^^^^^ +input.y:2.7-11: previous declaration + %type "foo" + ^^^^^ +]]) +AT_TEST([[%token foo "foo" +%printer {bar} "foo" +%printer {baz} foo %% exp: foo; +]], +[[input.y:3.10-14: error: %printer redeclaration for foo + %printer {baz} foo + ^^^^^ +input.y:2.10-14: previous declaration + %printer {bar} "foo" + ^^^^^ ]]) -AT_BISON_CHECK([-fcaret input.y], [1], [], -[[input.y:8.7-11: error: %type redeclaration for foo - %type "foo" - ^^^^^ -input.y:3.7-11: previous declaration - %type foo - ^^^^^ -input.y:10.13-17: error: %destructor redeclaration for foo - %destructor {baz} "foo" +AT_TEST([[%token foo "foo" +%destructor {bar} "foo" +%destructor {baz} foo +%% +exp: foo; +]], +[[input.y:3.13-17: error: %destructor redeclaration for foo + %destructor {baz} foo ^^^^^ -input.y:5.13-17: previous declaration - %destructor {bar} foo +input.y:2.13-17: previous declaration + %destructor {bar} "foo" ^^^^^ -input.y:9.10-14: error: %printer redeclaration for foo - %printer {baz} "foo" - ^^^^^ -input.y:4.10-14: previous declaration - %printer {bar} foo - ^^^^^ -input.y:11.1-5: error: %left redeclaration for foo - %left "foo" +]]) + +AT_TEST([[%token foo "foo" +%left "foo" +%left foo +%% +exp: foo; +]], +[[input.y:3.1-5: error: %left redeclaration for foo + %left foo + ^^^^^ +input.y:2.1-5: previous declaration + %left "foo" + ^^^^^ +]]) + +# This time, declare the alias after its use. + +# Precedence/associativity. +AT_TEST([[%left "foo" +%left foo +%token foo "foo" +%% +exp: foo; +]], +[[input.y:2.1-5: error: %left redeclaration for foo + %left foo ^^^^^ -input.y:6.1-5: previous declaration - %left foo +input.y:1.1-5: previous declaration + %left "foo" ^^^^^ ]]) +# Printer. +AT_TEST([[%printer {} "foo" +%printer {} foo +%token foo "foo" +%% +exp: foo; +]], +[[input.y:2.10-11: error: %printer redeclaration for foo + %printer {} foo + ^^ +input.y:1.10-11: previous declaration + %printer {} "foo" + ^^ +]]) + +# Destructor. +AT_TEST([[%destructor {} "foo" +%destructor {} foo +%token foo "foo" +%% +exp: foo; +]], +[[input.y:2.13-14: error: %destructor redeclaration for foo + %destructor {} foo + ^^ +input.y:1.13-14: previous declaration + %destructor {} "foo" + ^^ +]]) + +m4_popdef([AT_TEST]) AT_CLEANUP @@ -993,15 +1024,9 @@ without_period: "WITHOUT.PERIOD"; AT_BISON_OPTION_POPDEFS # POSIX Yacc accept periods, but not dashes. -AT_BISON_CHECK([--yacc -Wno-error input.y], [], [], -[[input.y:9.8-16: warning: POSIX Yacc forbids dashes in symbol names: WITH-DASH [-Wyacc] -input.y:20.8-16: warning: POSIX Yacc forbids dashes in symbol names: with-dash [-Wyacc] -]]) - -# So warn about them. -AT_BISON_CHECK([-Wyacc input.y], [], [], -[[input.y:9.8-16: warning: POSIX Yacc forbids dashes in symbol names: WITH-DASH [-Wyacc] -input.y:20.8-16: warning: POSIX Yacc forbids dashes in symbol names: with-dash [-Wyacc] +AT_BISON_CHECK([--yacc input.y], [1], [], +[[input.y:9.8-16: error: POSIX Yacc forbids dashes in symbol names: WITH-DASH [-Werror=yacc] +input.y:20.8-16: error: POSIX Yacc forbids dashes in symbol names: with-dash [-Werror=yacc] ]]) # Dashes are fine for GNU Bison. @@ -1422,8 +1447,8 @@ AT_SETUP([["%define" Boolean variables]]) AT_DATA([Input.y], [[%language "Java" -%define public "maybe" -%define parser_class_name "Input" +%define public maybe +%define parser_class_name {Input} %% start: %empty; ]]) @@ -1434,6 +1459,72 @@ AT_BISON_CHECK([[Input.y]], [1], [], AT_CLEANUP +## ------------------------ ## +## %define code variables. ## +## ------------------------ ## + +AT_SETUP([["%define" code variables]]) + +m4_pushdef([AT_TEST], +[AT_DATA([input.yy], +[[%skeleton "lalr1.cc" %locations +%define api.location.type ]$1[quux]$2[ +%define api.namespace ]$1[quux]$2[ +%define api.prefix ]$1[quux]$2[ +%define api.token.prefix ]$1[quux]$2[ +%token TOK // Otherwise api.token.prefix is unused. +%% +start: TOK; +]]) + +AT_BISON_CHECK([[input.yy]], [0], [], +[[input.yy:2.9-25: warning: %define variable 'api.location.type' requires '{...}' values [-Wdeprecated] +input.yy:4.9-18: warning: %define variable 'api.prefix' requires '{...}' values [-Wdeprecated] +input.yy:5.9-24: warning: %define variable 'api.token.prefix' requires '{...}' values [-Wdeprecated] +input.yy:3.9-21: warning: %define variable 'api.namespace' requires '{...}' values [-Wdeprecated] +]]) +]) + +AT_TEST([], []) +AT_TEST(["], ["]) +m4_popdef([AT_TEST]) + +AT_CLEANUP + + +## --------------------------- ## +## %define keyword variables. ## +## --------------------------- ## + +AT_SETUP([["%define" keyword variables]]) + +m4_pushdef([AT_TEST], +[AT_DATA([input.y], +[[%define api.pure ]$1[true]$2[ +%define api.push-pull ]$1[both]$2[ +%define lr.default-reduction ]$1[most]$2[ +%define lr.keep-unreachable-state ]$1[true]$2[ +%define lr.type ]$1[lalr]$2[ +%% +exp: %empty +]]) + +AT_BISON_CHECK([[input.y]], [0], [], +[[input.y:5.9-15: warning: %define variable 'lr.type' requires keyword values [-Wdeprecated] +input.y:3.9-28: warning: %define variable 'lr.default-reduction' requires keyword values [-Wdeprecated] +input.y:4.9-33: warning: %define variable 'lr.keep-unreachable-state' requires keyword values [-Wdeprecated] +input.y:2.9-21: warning: %define variable 'api.push-pull' requires keyword values [-Wdeprecated] +input.y:1.9-16: warning: %define variable 'api.pure' requires keyword values [-Wdeprecated] +]]) +]) + +AT_TEST(["], ["]) +AT_TEST([{], [}]) +m4_popdef([AT_TEST]) + +AT_CLEANUP + + ## ------------------------ ## ## %define enum variables. ## ## ------------------------ ## @@ -1739,11 +1830,11 @@ AT_BISON_CHECK([[-Dparse.lac.memory-trace=full input.y]], AT_CLEANUP -## --------------------------------------------- ## -## -Werror is not affected by -Wnone and -Wall. ## -## --------------------------------------------- ## +## ---------------------- ## +## -Werror combinations. ## +## ---------------------- ## -AT_SETUP([[-Werror is not affected by -Wnone and -Wall]]) +AT_SETUP([[-Werror combinations]]) AT_DATA([[input.y]], [[%% @@ -1769,6 +1860,18 @@ AT_BISON_CHECK([[-Werror,no-all,other input.y]], [[1]], [[]], [[input.y:2.15: error: stray '$' [-Werror=other] ]]) +# Check that -Wno-error keeps warnings enabled, but non fatal. +AT_BISON_CHECK([[-Werror -Wno-error=other input.y]], [[0]], [[]], +[[input.y:2.15: warning: stray '$' [-Wother] +]]) + +AT_BISON_CHECK([[-Wno-error=other -Werror input.y]], [[0]], [[]], +[[input.y:2.15: warning: stray '$' [-Wother] +]]) + +AT_BISON_CHECK([[-Werror=other -Wno-other input.y]], [[0]], [[]], +[[]]) + AT_CLEANUP @@ -1791,16 +1894,61 @@ AT_BISON_CHECK([[$2 input.y]], [[1]], [[]], ]]) ]) -AT_TEST([%define api.prefix foo %name-prefix "bar"], [], [input.y:1.9-18]) -AT_TEST([], [-Dapi.prefix=foo -p bar], [:2]) -AT_TEST([%name-prefix "bar"], [-Dapi.prefix=foo], [:2]) -AT_TEST([%define api.prefix foo], [-p bar], [input.y:1.9-18]) +AT_TEST([%define api.prefix {foo} %name-prefix "bar"], [], [input.y:1.9-18]) +AT_TEST([], [-Dapi.prefix={foo} -p bar], [:2]) +AT_TEST([%name-prefix "bar"], [-Dapi.prefix={foo}], [:2]) +AT_TEST([%define api.prefix {foo}], [-p bar], [input.y:1.9-18]) m4_popdef([AT_TEST]) AT_CLEANUP +## ----------------------- ## +## Redefined %union name. ## +## ----------------------- ## + +AT_SETUP([[Redefined %union name]]) + +# AT_TEST(DIRECTIVES, ERROR) +# -------------------------- +m4_pushdef([AT_TEST], +[AT_DATA([[input.y]], +[$1 +%% +exp: %empty; +]) + +AT_BISON_CHECK([[input.y]], [[1]], [[]], +[$2]) +]) + +AT_TEST([[%union foo {}; +%union {}; +%union foo {}; +%define api.value.union.name foo]], +[[input.y:3.8-10: error: %define variable 'api.value.union.name' redefined +input.y:1.8-10: previous definition +input.y:4.9-28: error: %define variable 'api.value.union.name' redefined +input.y:3.8-10: previous definition +]]) + +AT_TEST([[%define api.value.union.name {foo}]], +[[input.y:1.9-28: error: %define variable 'api.value.union.name' requires keyword values +input.y:1.9-28: error: %define variable 'api.value.union.name' is not used +]]) + +AT_TEST([[%define api.value.union.name "foo"]], +[[input.y:1.9-28: error: %define variable 'api.value.union.name' requires keyword values +input.y:1.9-28: error: %define variable 'api.value.union.name' is not used +]]) + +m4_popdef([AT_TEST]) +AT_CLEANUP + + + + ## -------------- ## ## Stray $ or @. ## ## -------------- ##