re PR other/30824 (-Werror -Wfatal-errors should stop after the first warning)

2007-02-20  Manuel Lopez-Ibanez  <manu@gcc.gnu.org>
            DJ Delorie <dj@redhat.com>

	PR other/30824
	* diagnostic.c (diagnostic_count_diagnostic): Move -Werror
	logic to...
	(diagnostic_report_diagnostic): ... here, and turn them into
	real errors. If warnings are inhibited, no need to do
	anything.

testsuite/
	* gcc.dg/Wfatal.c: New.
	* gcc.dg/Wfatal-2.c: New.
	* gcc.dg/Werror-1.c: Adjust expectations.
	* gcc.dg/Werror-5.c: Likewise.
	* gcc.dg/Werror-7.c: Likewise.
	* gcc.dg/Werror-10.c: Likewise.
	* gcc.dg/Werror-11.c: Likewise.

Co-Authored-By: DJ Delorie <dj@redhat.com>

From-SVN: r122159
parent 6bdcc60c
2007-02-20 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
DJ Delorie <dj@redhat.com>
PR other/30824
* diagnostic.c (diagnostic_count_diagnostic): Move -Werror logic to...
(diagnostic_report_diagnostic): ... here, and turn them into real
errors. If warnings are inhibited, no need to do anything.
2007-02-20 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (expm1xf2): Reorder insn sequence for
......
......@@ -202,27 +202,9 @@ diagnostic_count_diagnostic (diagnostic_context *context,
break;
case DK_WARNING:
if (!diagnostic_report_warnings_p ())
return false;
/* -Werror can reclassify warnings as errors, but
classify_diagnostic can reclassify it back to a warning. The
second part of this test detects that case. */
if (!context->warning_as_error_requested
|| (context->classify_diagnostic[diagnostic->option_index]
== DK_WARNING))
{
++diagnostic_kind_count (context, DK_WARNING);
break;
}
else if (context->issue_warnings_are_errors_message)
{
pp_verbatim (context->printer,
"%s: warnings being treated as errors\n", progname);
context->issue_warnings_are_errors_message = false;
}
++diagnostic_kind_count (context, DK_WARNING);
break;
/* And fall through. */
case DK_ERROR:
++diagnostic_kind_count (context, DK_ERROR);
break;
......@@ -362,6 +344,14 @@ void
diagnostic_report_diagnostic (diagnostic_context *context,
diagnostic_info *diagnostic)
{
bool maybe_print_warnings_as_errors_message = false;
/* Give preference to being able to inhibit warnings, before they
get reclassified to something else. */
if (diagnostic->kind == DK_WARNING
&& !diagnostic_report_warnings_p ())
return;
if (context->lock > 0)
{
/* If we're reporting an ICE in the middle of some other error,
......@@ -373,6 +363,17 @@ diagnostic_report_diagnostic (diagnostic_context *context,
error_recursion (context);
}
/* If the user requested that warnings be treated as errors, so be
it. Note that we do this before the next block so that
individual warnings can be overridden back to warnings with
-Wno-error=*. */
if (context->warning_as_error_requested
&& diagnostic->kind == DK_WARNING)
{
diagnostic->kind = DK_ERROR;
maybe_print_warnings_as_errors_message = true;
}
if (diagnostic->option_index)
{
/* This tests if the user provided the appropriate -Wfoo or
......@@ -382,13 +383,26 @@ diagnostic_report_diagnostic (diagnostic_context *context,
/* This tests if the user provided the appropriate -Werror=foo
option. */
if (context->classify_diagnostic[diagnostic->option_index] != DK_UNSPECIFIED)
diagnostic->kind = context->classify_diagnostic[diagnostic->option_index];
{
diagnostic->kind = context->classify_diagnostic[diagnostic->option_index];
maybe_print_warnings_as_errors_message = false;
}
/* This allows for future extensions, like temporarily disabling
warnings for ranges of source code. */
if (diagnostic->kind == DK_IGNORED)
return;
}
/* If we changed the kind due to -Werror, and didn't override it, we
need to print this message. */
if (context->issue_warnings_are_errors_message
&& maybe_print_warnings_as_errors_message)
{
pp_verbatim (context->printer,
"%s: warnings being treated as errors\n", progname);
context->issue_warnings_are_errors_message = false;
}
context->lock++;
if (diagnostic_count_diagnostic (context, diagnostic))
......
2007-02-20 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
DJ Delorie <dj@redhat.com>
PR other/30824
* gcc.dg/Wfatal.c: New.
* gcc.dg/Wfatal-2.c: New.
* gcc.dg/Werror-1.c: Adjust expectations.
* gcc.dg/Werror-5.c: Likewise.
* gcc.dg/Werror-7.c: Likewise.
* gcc.dg/Werror-10.c: Likewise.
* gcc.dg/Werror-11.c: Likewise.
2007-02-20 Tobias Burnus <burnus@net-b.de>
PR fortran/30522
......@@ -9,7 +9,7 @@
#pragma GCC diagnostic error "-Waddress"
void __attribute__((dj)) bar() { } /* { dg-warning "warning: .* attribute directive ignored" } */
void __attribute__((dj)) bar() { } /* { dg-error "error: .* attribute directive ignored" } */
int i;
......
......@@ -6,7 +6,7 @@
#pragma GCC diagnostic error "-Waddress"
void __attribute__((dj)) bar() { } /* { dg-warning "warning: .* attribute directive ignored" } */
void __attribute__((dj)) bar() { } /* { dg-error "error: .* attribute directive ignored" } */
int i;
......
......@@ -6,7 +6,7 @@
#pragma GCC diagnostic warning "-Waddress"
void __attribute__((dj)) bar() { } /* { dg-warning "warning: .* attribute directive ignored" } */
void __attribute__((dj)) bar() { } /* { dg-error "error: .* attribute directive ignored" } */
int i;
......
......@@ -4,13 +4,13 @@
/* Make sure -Werror turns warnings in to errors. */
void __attribute__((dj)) bar() { } /* { dg-warning "warning: .* attribute directive ignored" } */
void __attribute__((dj)) bar() { } /* { dg-error "error: .* attribute directive ignored" } */
int i;
void
foo ()
{
if (&i) /* { dg-warning "warning: .* will always evaluate as 'true'" } */
if (&i) /* { dg-error "error: .* will always evaluate as 'true'" } */
grill ();
}
......@@ -4,7 +4,7 @@
/* Make sure -Wno-error= overrides -Werror. */
void __attribute__((dj)) bar() { } /* { dg-warning "warning: .* attribute directive ignored" } */
void __attribute__((dj)) bar() { } /* { dg-error "error: .* attribute directive ignored" } */
int i;
......
/* { dg-do compile } */
/* { dg-options "-Woverflow -Wdiv-by-zero -Werror -Wfatal-errors" } */
#include <limits.h>
int i = INT_MAX + 1; /* { dg-error "integer overflow in expression" } */
int k = 1 / 0;
int j = INT_MIN - 1;
/* { dg-warning "being treated as errors" "" { target *-*-* } 0 } */
/* { dg-warning "terminated due to -Wfatal-errors" "" { target *-*-* } 0 } */
/* { dg-do compile } */
/* { dg-options "-Woverflow -Werror=div-by-zero -Wfatal-errors" } */
#include <limits.h>
int i = INT_MAX + 1; /* { dg-warning "integer overflow in expression" } */
int k = 1 / 0; /* { dg-error "division by zero" } */
int j = INT_MIN - 1;
/* { dg-warning "terminated due to -Wfatal-errors" "" { target *-*-* } 0 } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment