aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/diagnostic.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.9/gcc/diagnostic.c')
-rw-r--r--gcc-4.9/gcc/diagnostic.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc-4.9/gcc/diagnostic.c b/gcc-4.9/gcc/diagnostic.c
index 0cc75934d..3b57f23dd 100644
--- a/gcc-4.9/gcc/diagnostic.c
+++ b/gcc-4.9/gcc/diagnostic.c
@@ -127,6 +127,7 @@ diagnostic_initialize (diagnostic_context *context, int n_opts)
memset (context->diagnostic_count, 0, sizeof context->diagnostic_count);
context->some_warnings_are_errors = false;
context->warning_as_error_requested = false;
+ context->force_warnings_requested = false;
context->n_opts = n_opts;
context->classify_diagnostic = XNEWVEC (diagnostic_t, n_opts);
for (i = 0; i < n_opts; i++)
@@ -187,6 +188,7 @@ diagnostic_set_info_translated (diagnostic_info *diagnostic, const char *msg,
va_list *args, location_t location,
diagnostic_t kind)
{
+ location = map_discriminator_location (location);
diagnostic->message.err_no = errno;
diagnostic->message.args_ptr = args;
diagnostic->message.format_spec = msg;
@@ -513,6 +515,9 @@ diagnostic_report_current_module (diagnostic_context *context, location_t where)
if (where <= BUILTINS_LOCATION)
return;
+ if (has_discriminator (where))
+ where = map_discriminator_location (where);
+
linemap_resolve_location (line_table, where,
LRK_MACRO_DEFINITION_LOCATION,
&map);
@@ -685,7 +690,8 @@ diagnostic_report_diagnostic (diagnostic_context *context,
individual warnings can be overridden back to warnings with
-Wno-error=*. */
if (context->warning_as_error_requested
- && diagnostic->kind == DK_WARNING)
+ && diagnostic->kind == DK_WARNING
+ && !context->force_warnings_requested)
{
diagnostic->kind = DK_ERROR;
}
@@ -732,7 +738,9 @@ diagnostic_report_diagnostic (diagnostic_context *context,
/* This tests if the user provided the appropriate -Werror=foo
option. */
if (diag_class == DK_UNSPECIFIED
- && context->classify_diagnostic[diagnostic->option_index] != DK_UNSPECIFIED)
+ && context->classify_diagnostic[diagnostic->option_index] != DK_UNSPECIFIED
+ && (context->classify_diagnostic[diagnostic->option_index] != DK_ERROR
+ || !context->force_warnings_requested))
{
diagnostic->kind = context->classify_diagnostic[diagnostic->option_index];
}