]> git.saurik.com Git - bison.git/commitdiff
Don't let -Wnone disable -Werror.
authorJoel E. Denny <joeldenny@joeldenny.org>
Sun, 27 Mar 2011 19:39:25 +0000 (15:39 -0400)
committerJoel E. Denny <joeldenny@joeldenny.org>
Sun, 3 Apr 2011 21:51:14 +0000 (17:51 -0400)
Discussed at
<http://lists.gnu.org/archive/html/bison-patches/2010-08/msg00009.html>.
* NEWS (2.5): Document.
* src/getargs.c (flags_argmatch): Accept a new argument that
specifies what flags "all" and thus "none" affect.
(FLAGS_ARGMATCH): Update flags_argmatch invocation.
* tests/input.at (-Werror is not affected by -Wnone and -Wall):
New test group.

ChangeLog
NEWS
src/getargs.c
tests/input.at

index 07b11499959310f7b7180cf8c9da41a78addf803..4eb5ebd15bb44e10bab78f8b6dacebcb65ef90aa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2011-03-27  Joel E. Denny  <joeldenny@joeldenny.org>
+
+       Don't let -Wnone disable -Werror.
+       Discussed at
+       <http://lists.gnu.org/archive/html/bison-patches/2010-08/msg00009.html>.
+       * NEWS (2.5): Document.
+       * src/getargs.c (flags_argmatch): Accept a new argument that
+       specifies what flags "all" and thus "none" affect.
+       (FLAGS_ARGMATCH): Update flags_argmatch invocation.
+       * tests/input.at (-Werror is not affected by -Wnone and -Wall):
+       New test group.
+
 2011-03-27  Joel E. Denny  <joeldenny@joeldenny.org>
 
        * NEWS (2.5): Document fix for -Wno-CATEGORY.
 2011-03-27  Joel E. Denny  <joeldenny@joeldenny.org>
 
        * NEWS (2.5): Document fix for -Wno-CATEGORY.
diff --git a/NEWS b/NEWS
index b86648336d5a080ceb0406badbfb793815b8b2e0..243ada5325f44c14005f3f3466f6bf675642dddb 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -309,6 +309,13 @@ Bison News
 
     bison -Wall,no-yacc gram.y
 
 
     bison -Wall,no-yacc gram.y
 
+*** The "none" category no longer disables a preceding "error":
+
+  For example, for the following command line, Bison now reports
+  errors instead of warnings for incompatibilities with POSIX Yacc:
+
+    bison -Werror,none,yacc gram.y
+
 * Changes in version 2.4.3 (2010-08-05):
 
 ** Bison now obeys -Werror and --warnings=error for warnings about
 * Changes in version 2.4.3 (2010-08-05):
 
 ** Bison now obeys -Werror and --warnings=error for warnings about
index d65cfc0941ab8d65d9906b7260e1f04de6c3bc41..9c9f0c34c76fe6709020fe47955e7ee394430e2f 100644 (file)
@@ -86,18 +86,19 @@ char *program_name;
  *  \param option   option being decoded.
  *  \param keys     array of valid subarguments.
  *  \param values   array of corresponding (int) values.
  *  \param option   option being decoded.
  *  \param keys     array of valid subarguments.
  *  \param values   array of corresponding (int) values.
+ *  \param all      the all value.
  *  \param flags    the flags to update
  *  \param args     comma separated list of effective subarguments to decode.
  *                  If 0, then activate all the flags.
  *
  *  If VALUE != 0 then KEY sets flags and no-KEY clears them.
  *  \param flags    the flags to update
  *  \param args     comma separated list of effective subarguments to decode.
  *                  If 0, then activate all the flags.
  *
  *  If VALUE != 0 then KEY sets flags and no-KEY clears them.
- *  If VALUE == 0 then KEY clears all flags and no-KEY sets all flags.
- *  Thus no-none = all and no-all = none.
+ *  If VALUE == 0 then KEY clears all flags from \c all and no-KEY sets all
+ *  flags from \c all.  Thus no-none = all and no-all = none.
  */
 static void
 flags_argmatch (const char *option,
                const char * const keys[], const int values[],
  */
 static void
 flags_argmatch (const char *option,
                const char * const keys[], const int values[],
-               int *flags, char *args)
+               int all, int *flags, char *args)
 {
   if (args)
     {
 {
   if (args)
     {
@@ -107,20 +108,24 @@ flags_argmatch (const char *option,
          int no = strncmp (args, "no-", 3) == 0 ? 3 : 0;
          int value = XARGMATCH (option, args + no, keys, values);
          if (value == 0)
          int no = strncmp (args, "no-", 3) == 0 ? 3 : 0;
          int value = XARGMATCH (option, args + no, keys, values);
          if (value == 0)
-           if (no)
-             *flags = ~0;
-           else
-             *flags = 0;
+           {
+             if (no)
+               *flags |= all;
+             else
+               *flags &= ~all;
+           }
          else
          else
-           if (no)
-             *flags &= ~value;
-           else
-             *flags |= value;
+           {
+             if (no)
+               *flags &= ~value;
+             else
+               *flags |= value;
+           }
          args = strtok (NULL, ",");
        }
     }
   else
          args = strtok (NULL, ",");
        }
     }
   else
-    *flags = ~0;
+    *flags |= all;
 }
 
 /** Decode a set of sub arguments.
 }
 
 /** Decode a set of sub arguments.
@@ -130,11 +135,12 @@ flags_argmatch (const char *option,
  *
  *  \arg FlagName_args   the list of keys.
  *  \arg FlagName_types  the list of values.
  *
  *  \arg FlagName_args   the list of keys.
  *  \arg FlagName_types  the list of values.
+ *  \arg FlagName_all    the all value.
  *  \arg FlagName_flag   the flag to update.
  */
 #define FLAGS_ARGMATCH(FlagName, Args)                                 \
   flags_argmatch ("--" #FlagName, FlagName ## _args, FlagName ## _types, \
  *  \arg FlagName_flag   the flag to update.
  */
 #define FLAGS_ARGMATCH(FlagName, Args)                                 \
   flags_argmatch ("--" #FlagName, FlagName ## _args, FlagName ## _types, \
-                 &FlagName ## _flag, Args)
+                 FlagName ## _all, &FlagName ## _flag, Args)
 
 
 /*----------------------.
 
 
 /*----------------------.
@@ -579,10 +585,7 @@ getargs (int argc, char *argv[])
        exit (EXIT_SUCCESS);
 
       case 'W':
        exit (EXIT_SUCCESS);
 
       case 'W':
-       if (optarg)
-         FLAGS_ARGMATCH (warnings, optarg);
-       else
-         warnings_flag |= warnings_all;
+       FLAGS_ARGMATCH (warnings, optarg);
        break;
 
       case 'b':
        break;
 
       case 'b':
index 9acd5448f8e9f7568527dfcb5211957ba5c78750..c8e28be75bacfab25a7aa2a1aa8855460b348d88 100644 (file)
@@ -1308,3 +1308,36 @@ AT_BISON_CHECK([[-Dparse.lac.memory-trace=full input.y]],
 ]])
 
 AT_CLEANUP
 ]])
 
 AT_CLEANUP
+
+## --------------------------------------------- ##
+## -Werror is not affected by -Wnone and -Wall.  ##
+## --------------------------------------------- ##
+
+AT_SETUP([[-Werror is not affected by -Wnone and -Wall]])
+
+AT_DATA([[input.y]],
+[[%%
+foo-bar: ;
+]])
+
+# -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
+]])
+AT_BISON_CHECK([[-W input.y]], [[0]], [[]],
+[[input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+]])
+AT_BISON_CHECK([[-Wno-none input.y]], [[0]], [[]],
+[[input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+]])
+
+# -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]],
+[[bison: warnings being treated as errors
+input.y:2.1-7: warning: POSIX Yacc forbids dashes in symbol names: foo-bar
+]])
+[mv stderr experr]
+AT_BISON_CHECK([[-Werror,no-all,yacc input.y]], [[1]], [[]], [[experr]])
+
+AT_CLEANUP