From f24695eff98c1d8c19b6d9fe8482cc2eca07e6b2 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 4 Mar 2013 18:15:49 +0100 Subject: [PATCH] diagnostics: no longer include the yacc category in -Wall It would be a pity to warn the users against Bison features... http://lists.gnu.org/archive/html/bison-patches/2013-02/msg00107.html * src/complain.h, src/complain.c (Wall): Disable Wyacc. (Weverything): New (hidden so far) category which really denotes all the categories (what used to be Wall). (warnings_args, warnings_types): Adjust. (warning_argmatch): Now !none = Weverything and conversely, no longer Wall. * NEWS, doc/bison.texi, src/getargs.c: Adjust the documentation. * tests/input.at (-Werror is not affected by -Wnone and -Wall): Adjust by not using a -Wyacc type of warning. --- NEWS | 5 +++++ doc/bison.texi | 4 +++- src/complain.c | 10 ++++++---- src/complain.h | 3 ++- src/getargs.c | 2 +- tests/input.at | 18 +++++++++--------- 6 files changed, 26 insertions(+), 16 deletions(-) diff --git a/NEWS b/NEWS index c92eae5..ef9f4fa 100644 --- a/NEWS +++ b/NEWS @@ -216,6 +216,11 @@ GNU Bison NEWS bar.y: error: shift/reduce conflicts: 1 found, 0 expected bar.y: error: reduce/reduce conflicts: 2 found, 0 expected +** Incompatibilities with POSIX Yacc + + The 'yacc' category is no longer part of '-Wall', enable it explicitly + with '-Wyacc'. + ** Additional yylex/yyparse arguments The new directive %param declares additional arguments to both yylex and diff --git a/doc/bison.texi b/doc/bison.texi index 5b1b0de..aad2b8c 100644 --- a/doc/bison.texi +++ b/doc/bison.texi @@ -9853,9 +9853,11 @@ releases of Bison may move warnings from this category to new, more specific categories. @item all -All the warnings. +All the warnings except @code{yacc}. + @item none Turn off all the warnings. + @item error See @option{-Werror}, below. @end table diff --git a/src/complain.c b/src/complain.c index 2e87097..fdc4b54 100644 --- a/src/complain.c +++ b/src/complain.c @@ -68,6 +68,7 @@ static const char * const warnings_args[] = "other", "all", "error", + "everything", 0 }; @@ -83,7 +84,8 @@ static const int warnings_types[] = Wprecedence, Wother, Wall, - Werror + Werror, + Weverything }; ARGMATCH_VERIFY (warnings_args, warnings_types); @@ -94,10 +96,10 @@ warning_argmatch (char const *arg, size_t no, size_t err) int value = XARGMATCH ("--warning", arg + no + err, warnings_args, warnings_types); - /* -Wnone == -Wno-all, and -Wno-none == -Wall. */ + /* -Wnone == -Wno-everything, and -Wno-none == -Weverything. */ if (!value) { - value = Wall; + value = Weverything; no = !no; } @@ -145,7 +147,7 @@ warnings_argmatch (char *args) else if (STREQ (args, "no-error")) { warnings_are_errors = false; - warning_argmatch ("no-error=all", 3, 6); + warning_argmatch ("no-error=everything", 3, 6); } else { diff --git a/src/complain.h b/src/complain.h index 4239bf6..0d81503 100644 --- a/src/complain.h +++ b/src/complain.h @@ -98,7 +98,8 @@ typedef enum no_caret = 1 << 14, /**< Do not display caret location. */ /**< All above warnings. */ - Wall = ~complaint & ~fatal & ~silent + Weverything = ~complaint & ~fatal & ~silent, + Wall = Weverything & ~Wyacc } warnings; /** Whether the warnings of \a flags are all unset. diff --git a/src/getargs.c b/src/getargs.c index e4ffc02..0254865 100644 --- a/src/getargs.c +++ b/src/getargs.c @@ -330,7 +330,7 @@ Warning categories include:\n\ 'empty-rule' empty rules without %empty\n\ 'precedence' useless precedence and associativity\n\ 'other' all other warnings (enabled by default)\n\ - 'all' all the warnings\n\ + 'all' all the warnings except 'yacc'\n\ 'no-CATEGORY' turn off warnings in CATEGORY\n\ 'none' turn off all the warnings\n\ 'error[=CATEGORY]' treat warnings as errors\n\ diff --git a/tests/input.at b/tests/input.at index 499141a..8a677fa 100644 --- a/tests/input.at +++ b/tests/input.at @@ -1708,27 +1708,27 @@ AT_SETUP([[-Werror is not affected by -Wnone and -Wall]]) AT_DATA([[input.y]], [[%% -foo-bar: %empty; +a: '0' { $$ = $; }; ]]) # -Werror is not enabled by -Wall or equivalent. AT_BISON_CHECK([[-Wall input.y]], [[0]], [[]], -[[input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar [-Wyacc] +[[input.y:2.15: warning: stray '$' [-Wother] ]]) AT_BISON_CHECK([[-W input.y]], [[0]], [[]], -[[input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar [-Wyacc] +[[input.y:2.15: warning: stray '$' [-Wother] ]]) AT_BISON_CHECK([[-Wno-none input.y]], [[0]], [[]], -[[input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar [-Wyacc] +[[input.y:2.15: warning: stray '$' [-Wother] ]]) # -Werror is not disabled by -Wnone or equivalent. -AT_BISON_CHECK([[-Werror,none,yacc input.y]], [[1]], [[]], [[stderr]]) -AT_CHECK([[sed 's/^.*bison:/bison:/' stderr]], [[0]], -[[input.y:2.1-7: error: POSIX Yacc forbids dashes in symbol names: foo-bar [-Werror=yacc] +AT_BISON_CHECK([[-Werror,none,other input.y]], [[1]], [[]], +[[input.y:2.15: error: stray '$' [-Werror=other] +]]) +AT_BISON_CHECK([[-Werror,no-all,other input.y]], [[1]], [[]], +[[input.y:2.15: error: stray '$' [-Werror=other] ]]) -[mv stderr experr] -AT_BISON_CHECK([[-Werror,no-all,yacc input.y]], [[1]], [[]], [[experr]]) AT_CLEANUP -- 2.7.4