aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/diagnostic.c
diff options
context:
space:
mode:
authorRong Xu <xur@google.com>2014-07-21 16:47:22 -0700
committerRong Xu <xur@google.com>2014-07-29 15:31:03 -0700
commit38a8aecfb882072900434499696b5c32a2274515 (patch)
tree2aac97f0ae24b03cd98c1a06e989c031c173f889 /gcc-4.9/gcc/diagnostic.c
parentc231900e5dcc14d8296bd9f62b45997a49d4d5e7 (diff)
downloadtoolchain_gcc-38a8aecfb882072900434499696b5c32a2274515.tar.gz
toolchain_gcc-38a8aecfb882072900434499696b5c32a2274515.tar.bz2
toolchain_gcc-38a8aecfb882072900434499696b5c32a2274515.zip
[4.9] Switch gcc-4.9 to use google/gcc-4_9 branch.
This source drop uses svn version r212828 of google/gcc-4.9 branch. We also cherry-picked r213062, r213063 and r213064 to fix windows build issues. All gcc-4.9 patches before July 3rd are ported to google/gcc-4.9. The following prior commits has not been merged to google branch yet. (They are included in this commit). e7af147f979e657fe2df00808e5b4319b0e088c6, baf87df3cb2683649ba7e9872362a7e721117c23, and c231900e5dcc14d8296bd9f62b45997a49d4d5e7. Change-Id: I4bea3ea470387ff751c2be4cb0d4a12059b9299b
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];
}