bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: get -Wyacc out of -Wall (was: RFC: explicit empty right-hand side of


From: Akim Demaille
Subject: Re: get -Wyacc out of -Wall (was: RFC: explicit empty right-hand side of a rule)
Date: Mon, 4 Mar 2013 18:23:22 +0100

Le 27 févr. 2013 à 15:41, Akim Demaille <address@hidden> a écrit :

> Would someone object if -Wall meant "enable all the warnings except
> -Wyacc"?

I installed this.

commit f24695eff98c1d8c19b6d9fe8482cc2eca07e6b2
Author: Akim Demaille <address@hidden>
Date:   Mon Mar 4 18:15:49 2013 +0100

    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.

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
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]