diff options
author | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2007-02-20 10:18:58 +0000 |
---|---|---|
committer | Manuel López-Ibáñez <manu@gcc.gnu.org> | 2007-02-20 10:18:58 +0000 |
commit | 4e2bae26bfa2eab9678a125a7701291fe3dd7153 (patch) | |
tree | fa32faad84393dfa336f79b8f5cfeab5bd3aad7b /gcc | |
parent | 6bdcc60c754f23ad4cdaa61df43ef5acb1c5465b (diff) | |
download | gcc-4e2bae26bfa2eab9678a125a7701291fe3dd7153.zip gcc-4e2bae26bfa2eab9678a125a7701291fe3dd7153.tar.gz gcc-4e2bae26bfa2eab9678a125a7701291fe3dd7153.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/diagnostic.c | 56 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Werror-1.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Werror-10.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Werror-11.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Werror-5.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Werror-7.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Wfatal-2.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/Wfatal.c | 11 |
10 files changed, 81 insertions, 27 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d577878..ebceb40 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +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 diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c index 3691477..2199c7d 100644 --- a/gcc/diagnostic.c +++ b/gcc/diagnostic.c @@ -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)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8e85108..b5f91c5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,15 @@ +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 diff --git a/gcc/testsuite/gcc.dg/Werror-1.c b/gcc/testsuite/gcc.dg/Werror-1.c index 7984740..33fc1d3 100644 --- a/gcc/testsuite/gcc.dg/Werror-1.c +++ b/gcc/testsuite/gcc.dg/Werror-1.c @@ -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; diff --git a/gcc/testsuite/gcc.dg/Werror-10.c b/gcc/testsuite/gcc.dg/Werror-10.c index eeadf51..f564654 100644 --- a/gcc/testsuite/gcc.dg/Werror-10.c +++ b/gcc/testsuite/gcc.dg/Werror-10.c @@ -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; diff --git a/gcc/testsuite/gcc.dg/Werror-11.c b/gcc/testsuite/gcc.dg/Werror-11.c index 493ded0..0dea5fa 100644 --- a/gcc/testsuite/gcc.dg/Werror-11.c +++ b/gcc/testsuite/gcc.dg/Werror-11.c @@ -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; diff --git a/gcc/testsuite/gcc.dg/Werror-5.c b/gcc/testsuite/gcc.dg/Werror-5.c index 40d3cd1..8a21593 100644 --- a/gcc/testsuite/gcc.dg/Werror-5.c +++ b/gcc/testsuite/gcc.dg/Werror-5.c @@ -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 (); } diff --git a/gcc/testsuite/gcc.dg/Werror-7.c b/gcc/testsuite/gcc.dg/Werror-7.c index 9829ce9..6a69fae 100644 --- a/gcc/testsuite/gcc.dg/Werror-7.c +++ b/gcc/testsuite/gcc.dg/Werror-7.c @@ -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; diff --git a/gcc/testsuite/gcc.dg/Wfatal-2.c b/gcc/testsuite/gcc.dg/Wfatal-2.c new file mode 100644 index 0000000..cbb7c8e --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wfatal-2.c @@ -0,0 +1,9 @@ +/* { 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 } */ diff --git a/gcc/testsuite/gcc.dg/Wfatal.c b/gcc/testsuite/gcc.dg/Wfatal.c new file mode 100644 index 0000000..bb3efc8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wfatal.c @@ -0,0 +1,11 @@ +/* { 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 } */ + + + |