X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/f249e803f032cc5e2bdce431589067595fdfd4ef..559b30881dd694f39aaa809797e463de73ed4e34:/tests/input.at diff --git a/tests/input.at b/tests/input.at index eb73bf96..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 @@ -654,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 @@ -956,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. @@ -1768,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]], [[%% @@ -1798,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 @@ -1830,6 +1904,51 @@ 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 @. ## ## -------------- ##