summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel E. Denny <joeldenny@joeldenny.org>2011-03-27 15:39:25 -0400
committerJoel E. Denny <joeldenny@joeldenny.org>2011-04-09 13:00:06 -0400
commitbf0e44e87c31bbab569c76e94ced6f4230e69f1f (patch)
tree9ef8adec66d647f81cd196fc35315dd023aa458d
parent86408959da5eddf26493eef64f049034a7849e2a (diff)
downloadbison-bf0e44e87c31bbab569c76e94ced6f4230e69f1f.tar.gz
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. (cherry picked from commit dab9663283437092d17af8ede75f3aff33380d53)
-rw-r--r--ChangeLog12
-rw-r--r--NEWS7
-rw-r--r--src/getargs.c37
-rw-r--r--tests/input.at33
4 files changed, 72 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index bd642258..8feb6a55 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
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-20 Joel E. Denny <joeldenny@joeldenny.org>
diff --git a/NEWS b/NEWS
index 64a25704..404efd7a 100644
--- a/NEWS
+++ b/NEWS
@@ -368,6 +368,13 @@ Bison News
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
diff --git a/src/getargs.c b/src/getargs.c
index 35b6a2a6..a15dd24c 100644
--- a/src/getargs.c
+++ b/src/getargs.c
@@ -82,18 +82,19 @@ char *program_name;
* \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.
- * 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[],
- int *flags, char *args)
+ int all, int *flags, char *args)
{
if (args)
{
@@ -103,20 +104,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)
- if (no)
- *flags = ~0;
- else
- *flags = 0;
+ {
+ if (no)
+ *flags |= all;
+ else
+ *flags &= ~all;
+ }
else
- if (no)
- *flags &= ~value;
- else
- *flags |= value;
+ {
+ if (no)
+ *flags &= ~value;
+ else
+ *flags |= value;
+ }
args = strtok (NULL, ",");
}
}
else
- *flags = ~0;
+ *flags |= all;
}
/** Decode a set of sub arguments.
@@ -126,11 +131,12 @@ flags_argmatch (const char *option,
*
* \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, \
- &FlagName ## _flag, Args)
+ FlagName ## _all, &FlagName ## _flag, Args)
/*----------------------.
@@ -576,10 +582,7 @@ getargs (int argc, char *argv[])
exit (EXIT_SUCCESS);
case 'W':
- if (optarg)
- FLAGS_ARGMATCH (warnings, optarg);
- else
- warnings_flag |= warnings_all;
+ FLAGS_ARGMATCH (warnings, optarg);
break;
case 'b':
diff --git a/tests/input.at b/tests/input.at
index ada68261..8d1e80d1 100644
--- a/tests/input.at
+++ b/tests/input.at
@@ -1314,3 +1314,36 @@ AT_BISON_CHECK([[-Dparse.lac.memory-trace=full input.y]],
]])
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