gcc.c (driver_unknown_option_callback): Only permit and save unknown -Wno- options.
authorJoseph Myers <joseph@codesourcery.com>
Tue, 22 Mar 2011 22:19:01 +0000 (22:19 +0000)
committerJoseph Myers <jsm28@gcc.gnu.org>
Tue, 22 Mar 2011 22:19:01 +0000 (22:19 +0000)
* gcc.c (driver_unknown_option_callback): Only permit and save
unknown -Wno- options.
(driver_wrong_lang_callback): Save options directly instead of via
driver_unknown_option_callback.

From-SVN: r171307

gcc/ChangeLog
gcc/gcc.c

index a6fa3ddfc8cf126aec6b86beb0ad4c4222986935..9503e8b822af63332e96fa28839447f231b26b26 100644 (file)
@@ -1,3 +1,10 @@
+2011-03-22  Joseph Myers  <joseph@codesourcery.com>
+
+       * gcc.c (driver_unknown_option_callback): Only permit and save
+       unknown -Wno- options.
+       (driver_wrong_lang_callback): Save options directly instead of via
+       driver_unknown_option_callback.
+
 2011-03-22  Eric Botcazou  <ebotcazou@adacore.com>
 
        * combine.c (simplify_set): Try harder to find the best CC mode when
index ef308e33dc3fb6e04e125a2e23385c8e0c2799c4..e6ddf41afd2fa0d68021b5f50dd3ecda8cabebc1 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -3080,16 +3080,24 @@ save_switch (const char *opt, size_t n_args, const char *const *args,
 }
 
 /* Handle an option DECODED that is unknown to the option-processing
-   machinery, but may be known to specs.  */
+   machinery.  */
 
 static bool
 driver_unknown_option_callback (const struct cl_decoded_option *decoded)
 {
-  save_switch (decoded->canonical_option[0],
-              decoded->canonical_option_num_elements - 1,
-              &decoded->canonical_option[1], false);
-
-  return false;
+  const char *opt = decoded->arg;
+  if (opt[1] == 'W' && opt[2] == 'n' && opt[3] == 'o' && opt[4] == '-'
+      && !(decoded->errors & CL_ERR_NEGATIVE))
+    {
+      /* Leave unknown -Wno-* options for the compiler proper, to be
+        diagnosed only if there are warnings.  */
+      save_switch (decoded->canonical_option[0],
+                  decoded->canonical_option_num_elements - 1,
+                  &decoded->canonical_option[1], false);
+      return false;
+    }
+  else
+    return true;
 }
 
 /* Handle an option DECODED that is not marked as CL_DRIVER.
@@ -3110,7 +3118,9 @@ driver_wrong_lang_callback (const struct cl_decoded_option *decoded,
     error ("unrecognized command line option %qs",
           decoded->orig_option_with_args_text);
   else
-    driver_unknown_option_callback (decoded);
+    save_switch (decoded->canonical_option[0],
+                decoded->canonical_option_num_elements - 1,
+                &decoded->canonical_option[1], false);
 }
 
 /* Note that an option (index OPT_INDEX, argument ARG, value VALUE)