This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Fix RejectNegative handling for -Wno- options
- From: "Joseph S. Myers" <joseph at codesourcery dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Sun, 29 Aug 2010 23:20:38 +0000 (UTC)
- Subject: Fix RejectNegative handling for -Wno- options
My previous option-handling patches accidentally caused -Wno- versions
of -W options marked RejectNegative to be treated like -Wno- versions
of completely unknown options: quietly ignored unless some other
warning was given, and in that case diagnosed with a warning.
I don't think that is appropriate for these options; the point of
RejectNegative markings for these options that take arguments is that
we know that the negative version is not meaningful (or hopelessly
confusing and likely to be a mistake, as in the case of "-Wno-" for
"-Wno-extra"), rather than being an option that might be known to a
later GCC version. This patch causes such options to get errors
again, independent of whether any other diagnostics are given.
Bootstrapped with no regressions on x86_64-unknown-linux-gnu. OK to
commit?
2010-08-29 Joseph Myers <joseph@codesourcery.com>
* opts.h (CL_ERR_NEGATIVE): Define.
* opts.c (unknown_option_callback): Don't postpone warnings for
options marked with CL_ERR_NEGATIVE.
* opts-common.c (decode_cmdline_option): Set CL_ERR_NEGATIVE error
for negative versions of CL_REJECT_NEGATIVE options.
testsuite:
2010-08-29 Joseph Myers <joseph@codesourcery.com>
* gcc.dg/opts-1.c: Expect errors, not warnings.
Index: gcc/opts-common.c
===================================================================
--- gcc/opts-common.c (revision 163616)
+++ gcc/opts-common.c (working copy)
@@ -197,6 +197,7 @@ decode_cmdline_option (const char **argv
if (!value && (option->flags & CL_REJECT_NEGATIVE))
{
opt_index = OPT_SPECIAL_unknown;
+ errors |= CL_ERR_NEGATIVE;
arg = argv[0];
goto done;
}
Index: gcc/testsuite/gcc.dg/opts-1.c
===================================================================
--- gcc/testsuite/gcc.dg/opts-1.c (revision 163616)
+++ gcc/testsuite/gcc.dg/opts-1.c (working copy)
@@ -5,5 +5,5 @@
/* { dg-error "-fno-abi-version" "-fno-abi-version" { target *-*-* } 0 } */
/* { dg-error "-fno-lto-compression-level" "-fno-lto-compression-level" { target *-*-* } 0 } */
/* { dg-error "-fno-tree-parallelize-loops" "-fno-tree-parallelize-loops" { target *-*-* } 0 } */
-/* { dg-warning "-Wno-strict-overflow" "-Wno-strict-overflow" { target *-*-* } 0 } */
-/* { dg-warning "-Wno-strict-aliasing" "-Wno-strict-aliasing" { target *-*-* } 0 } */
+/* { dg-error "-Wno-strict-overflow" "-Wno-strict-overflow" { target *-*-* } 0 } */
+/* { dg-error "-Wno-strict-aliasing" "-Wno-strict-aliasing" { target *-*-* } 0 } */
Index: gcc/opts.c
===================================================================
--- gcc/opts.c (revision 163616)
+++ gcc/opts.c (working copy)
@@ -482,7 +482,8 @@ unknown_option_callback (const struct cl
{
const char *opt = decoded->arg;
- if (opt[1] == 'W' && opt[2] == 'n' && opt[3] == 'o' && opt[4] == '-')
+ if (opt[1] == 'W' && opt[2] == 'n' && opt[3] == 'o' && opt[4] == '-'
+ && !(decoded->errors & CL_ERR_NEGATIVE))
{
/* We don't generate warnings for unknown -Wno-* options unless
we issue diagnostics. */
Index: gcc/opts.h
===================================================================
--- gcc/opts.h (revision 163616)
+++ gcc/opts.h (working copy)
@@ -102,6 +102,9 @@ extern const unsigned int cl_lang_count;
#define CL_ERR_MISSING_ARG (1 << 1) /* Argument required but missing. */
#define CL_ERR_WRONG_LANG (1 << 2) /* Option for wrong language. */
#define CL_ERR_UINT_ARG (1 << 3) /* Bad unsigned integer argument. */
+#define CL_ERR_NEGATIVE (1 << 4) /* Negative form of option
+ not permitted (together
+ with OPT_SPECIAL_unknown). */
/* Structure describing the result of decoding an option. */
--
Joseph S. Myers
joseph@codesourcery.com