diff mbox

Remove warning_as_error_callback global state

Message ID Pine.LNX.4.64.1011111625590.5853@digraph.polyomino.org.uk
State New
Headers show

Commit Message

Joseph Myers Nov. 11, 2010, 4:27 p.m. UTC
One use of global state in opts.c is the warning_as_error_callback
static variable.

This callback facility was used by C-family front ends to allow
-Werror=option to enable the preprocessor warnings from -Woption,
before the option handlers were called as if -Woption had been
passed.  Now that the option handlers are called, this facility is
redundant, and this patch removes it.

Almost all of what the C-family callback did was covered by the option
handlers.  The only bits not so covered were the handling of
-Werror=normalized=, which is moved to the handlers, and setting the
preprocessor -Wlong-long setting, which is done later after all
options have been processed so doesn't need to be done there.

(#pragma GCC diagnostic doesn't currently go through the handlers; I
may fix that in a subsequent patch.  In that context it will become
useful for the handlers to set the preprocessor -Wlong-long setting.)

Bootstrapped with no regressions on x86_64-unknown-linux-gnu.  OK to
commit (the non-front-end parts)?

2010-11-11  Joseph Myers  <joseph@codesourcery.com>

	* opts.c (warning_as_error_callback,
	register_warning_as_error_callback): Remove.
	(enable_warning_as_error): Don't use warning_as_error_callback.
	* opts.h (register_warning_as_error_callback): Remove.

c-family:
2010-11-11  Joseph Myers  <joseph@codesourcery.com>

	* c-opts.c (warning_as_error_callback): Remove.
	(c_common_initialize_diagnostics): Don't call
	register_warning_as_error_callback.
	(c_common_handle_option): Handle -Werror=normalized= here.

testsuite:
2010-11-11  Joseph Myers  <joseph@codesourcery.com>

	* gcc.dg/cpp/warn-normalized-3.c: Update expected note text.

Comments

Diego Novillo Nov. 11, 2010, 4:52 p.m. UTC | #1
On Thu, Nov 11, 2010 at 11:27, Joseph S. Myers <joseph@codesourcery.com> wrote:

> Bootstrapped with no regressions on x86_64-unknown-linux-gnu.  OK to
> commit (the non-front-end parts)?

Yes.


Diego.
diff mbox

Patch

Index: gcc/c-family/c-opts.c
===================================================================
--- gcc/c-family/c-opts.c	(revision 166597)
+++ gcc/c-family/c-opts.c	(working copy)
@@ -144,89 +144,6 @@  defer_opt (enum opt_code code, const cha
   deferred_count++;
 }
 
-/* -Werror= may set a warning option to enable a warning that is emitted
-   by the preprocessor.  Set any corresponding flag in cpp_opts.  */
-
-static void
-warning_as_error_callback (int option_index)
-{
-  switch (option_index)
-    {
-      default:
-	/* Ignore options not associated with the preprocessor.  */
-	break;
-
-      case OPT_Wdeprecated:
-	cpp_opts->cpp_warn_deprecated = 1;
-	break;
-
-      case OPT_Wcomment:
-	cpp_opts->warn_comments = 1;
-	break;
-
-      case OPT_Wtrigraphs:
-	cpp_opts->warn_trigraphs = 1;
-	break;
-
-      case OPT_Wmultichar:
-	cpp_opts->warn_multichar = 1;
-	break;
-
-      case OPT_Wtraditional:
-	cpp_opts->cpp_warn_traditional = 1;
-	break;
-
-      case OPT_Wlong_long:
-	cpp_opts->cpp_warn_long_long = 1;
-	break;
-
-      case OPT_Wendif_labels:
-	cpp_opts->warn_endif_labels = 1;
-	break;
-
-      case OPT_Wvariadic_macros:
-	/* Set the local flag that is used later to update cpp_opts.  */
-	warn_variadic_macros = 1;
-	break;
-
-      case OPT_Wbuiltin_macro_redefined:
-	cpp_opts->warn_builtin_macro_redefined = 1;
-	break;
-
-      case OPT_Wundef:
-	cpp_opts->warn_undef = 1;
-	break;
-
-      case OPT_Wunused_macros:
-	/* Set the local flag that is used later to update cpp_opts.  */
-	warn_unused_macros = 1;
-	break;
-
-      case OPT_Wc___compat:
-	/* Add warnings in the same way as c_common_handle_option below.  */
-	if (warn_enum_compare == -1)
-	  warn_enum_compare = 1;
-	if (warn_jump_misses_init == -1)
-	  warn_jump_misses_init = 1;
-	cpp_opts->warn_cxx_operator_names = 1;
-	break;
-
-      case OPT_Wnormalized_:
-	inform (input_location, "-Werror=normalized=: Set -Wnormalized=nfc");
-	cpp_opts->warn_normalize = normalized_C;
-	break;
-
-      case OPT_Winvalid_pch:
-	cpp_opts->warn_invalid_pch = 1;
-	break;
-
-      case OPT_Wcpp:
-	/* Handled by standard diagnostics using the option's associated
-	   boolean variable.  */
-	break;
-    }
-}
-
 /* Return language mask for option parsing.  */
 unsigned int
 c_common_option_lang_mask (void)
@@ -240,9 +157,6 @@  c_common_option_lang_mask (void)
 void
 c_common_initialize_diagnostics (diagnostic_context *context)
 {
-  /* Register callback for warnings enabled by -Werror=.  */
-  register_warning_as_error_callback (warning_as_error_callback);
-
   /* This is conditionalized only because that is the way the front
      ends used to do it.  Maybe this should be unconditional?  */
   if (c_dialect_cxx ())
@@ -560,17 +474,26 @@  c_common_handle_option (size_t scode, co
       break;
 
     case OPT_Wnormalized_:
-      if (!value || (arg && strcasecmp (arg, "none") == 0))
-	cpp_opts->warn_normalize = normalized_none;
-      else if (!arg || strcasecmp (arg, "nfkc") == 0)
-	cpp_opts->warn_normalize = normalized_KC;
-      else if (strcasecmp (arg, "id") == 0)
-	cpp_opts->warn_normalize = normalized_identifier_C;
-      else if (strcasecmp (arg, "nfc") == 0)
-	cpp_opts->warn_normalize = normalized_C;
+      if (kind == DK_ERROR)
+	{
+	  gcc_assert (!arg);
+	  inform (input_location, "-Werror=normalized=: set -Wnormalized=nfc");
+	  cpp_opts->warn_normalize = normalized_C;
+	}
       else
-	error ("argument %qs to %<-Wnormalized%> not recognized", arg);
-      break;
+	{
+	  if (!value || (arg && strcasecmp (arg, "none") == 0))
+	    cpp_opts->warn_normalize = normalized_none;
+	  else if (!arg || strcasecmp (arg, "nfkc") == 0)
+	    cpp_opts->warn_normalize = normalized_KC;
+	  else if (strcasecmp (arg, "id") == 0)
+	    cpp_opts->warn_normalize = normalized_identifier_C;
+	  else if (strcasecmp (arg, "nfc") == 0)
+	    cpp_opts->warn_normalize = normalized_C;
+	  else
+	    error ("argument %qs to %<-Wnormalized%> not recognized", arg);
+	  break;
+	}
 
     case OPT_Wreturn_type:
       warn_return_type = value;
Index: gcc/testsuite/gcc.dg/cpp/warn-normalized-3.c
===================================================================
--- gcc/testsuite/gcc.dg/cpp/warn-normalized-3.c	(revision 166597)
+++ gcc/testsuite/gcc.dg/cpp/warn-normalized-3.c	(working copy)
@@ -1,5 +1,5 @@ 
 // { dg-do preprocess }
 // { dg-options "-std=gnu99 -fdiagnostics-show-option -fextended-identifiers -Werror=normalized=" }
 /* { dg-message "some warnings being treated as errors" "" {target "*-*-*"} 0 } */
-        // { dg-prune-output ".*-Werror=normalized=: Set -Wnormalized=nfc.*" }
+        // { dg-prune-output ".*-Werror=normalized=: set -Wnormalized=nfc.*" }
 \u0F43  // { dg-error "`.U00000f43' is not in NFC .-Werror=normalized=." }
Index: gcc/opts.c
===================================================================
--- gcc/opts.c	(revision 166597)
+++ gcc/opts.c	(working copy)
@@ -2393,19 +2393,6 @@  get_option_state (struct gcc_options *op
   return true;
 }
 
-/* Callback function, called when -Werror= enables a warning.  */
-
-static void (*warning_as_error_callback) (int) = NULL;
-
-/* Register a callback for enable_warning_as_error calls.  */
-
-void
-register_warning_as_error_callback (void (*callback) (int))
-{
-  gcc_assert (warning_as_error_callback == NULL || callback == NULL);
-  warning_as_error_callback = callback;
-}
-
 /* Enable (or disable if VALUE is 0) a warning option ARG (language
    mask LANG_MASK, option handlers HANDLERS) as an error for
    diagnostic context DC (possibly NULL).  This is used by
@@ -2449,9 +2436,6 @@  enable_warning_as_error (const char *arg
 				     option_index, NULL, value, lang_mask,
 				     (int)kind, handlers,
 				     dc);
-
-	  if (warning_as_error_callback)
-	    warning_as_error_callback (option_index);
 	}
     }
   free (new_option);
Index: gcc/opts.h
===================================================================
--- gcc/opts.h	(revision 166597)
+++ gcc/opts.h	(working copy)
@@ -257,7 +257,6 @@  extern void read_cmdline_option (struct 
 				 unsigned int lang_mask,
 				 const struct cl_option_handlers *handlers,
 				 diagnostic_context *dc);
-extern void register_warning_as_error_callback (void (*callback) (int));
 extern void enable_warning_as_error (const char *arg, int value,
 				     unsigned int lang_mask,
 				     const struct cl_option_handlers *handlers,