Commit efc5aa6b by Nathan Sidwell Committed by Nathan Sidwell

diagnostic.c (diagnostic_action_after_output): Remove max error handling here ....

	* diagnostic.c (diagnostic_action_after_output): Remove max error
	handling here ....
	(diagnostic_report_diagnostic): ... do it here instead.

	testsuite/
	* c-c++-common/fmax-errors.c: Make sure note is emitted.

From-SVN: r241186
parent 983496fe
2016-10-14 Nathan Sidwell <nathan@acm.org>
* diagnostic.c (diagnostic_action_after_output): Remove fatal
and max error handling here ....
(diagnostic_report_diagnostic): ... do it here instead.
2016-10-14 David Malcolm <dmalcolm@redhat.com> 2016-10-14 David Malcolm <dmalcolm@redhat.com>
* print-rtl-function.c (print_edge): Omit "(flags)" when none are * print-rtl-function.c (print_edge): Omit "(flags)" when none are
......
...@@ -470,18 +470,8 @@ diagnostic_action_after_output (diagnostic_context *context, ...@@ -470,18 +470,8 @@ diagnostic_action_after_output (diagnostic_context *context,
diagnostic_finish (context); diagnostic_finish (context);
exit (FATAL_EXIT_CODE); exit (FATAL_EXIT_CODE);
} }
if (context->max_errors != 0 /* -fmax-error handling is just before the next diagnostic is
&& ((unsigned) (diagnostic_kind_count (context, DK_ERROR) emitted. */
+ diagnostic_kind_count (context, DK_SORRY)
+ diagnostic_kind_count (context, DK_WERROR))
>= context->max_errors))
{
fnotice (stderr,
"compilation terminated due to -fmax-errors=%u.\n",
context->max_errors);
diagnostic_finish (context);
exit (FATAL_EXIT_CODE);
}
break; break;
case DK_ICE: case DK_ICE:
...@@ -834,9 +824,7 @@ diagnostic_report_diagnostic (diagnostic_context *context, ...@@ -834,9 +824,7 @@ diagnostic_report_diagnostic (diagnostic_context *context,
-Wno-error=*. */ -Wno-error=*. */
if (context->warning_as_error_requested if (context->warning_as_error_requested
&& diagnostic->kind == DK_WARNING) && diagnostic->kind == DK_WARNING)
{ diagnostic->kind = DK_ERROR;
diagnostic->kind = DK_ERROR;
}
if (diagnostic->option_index if (diagnostic->option_index
&& diagnostic->option_index != permissive_error_option (context)) && diagnostic->option_index != permissive_error_option (context))
...@@ -892,6 +880,25 @@ diagnostic_report_diagnostic (diagnostic_context *context, ...@@ -892,6 +880,25 @@ diagnostic_report_diagnostic (diagnostic_context *context,
return false; return false;
} }
if (diagnostic->kind != DK_NOTE && context->max_errors)
{
/* Check, before emitting the diagnostic, whether we would
exceed the limit. This way we will emit notes relevant to
the final emitted error. */
int count = (diagnostic_kind_count (context, DK_ERROR)
+ diagnostic_kind_count (context, DK_SORRY)
+ diagnostic_kind_count (context, DK_WERROR));
if ((unsigned) count >= context->max_errors)
{
fnotice (stderr,
"compilation terminated due to -fmax-errors=%u.\n",
context->max_errors);
diagnostic_finish (context);
exit (FATAL_EXIT_CODE);
}
}
context->lock++; context->lock++;
if (diagnostic->kind == DK_ICE || diagnostic->kind == DK_ICE_NOBT) if (diagnostic->kind == DK_ICE || diagnostic->kind == DK_ICE_NOBT)
......
2016-10-14 Nathan Sidwell <nathan@acm.org>
* c-c++-common/fmax-errors.c: Add error with note.
2016-10-14 Jakub Jelinek <jakub@redhat.com> 2016-10-14 Jakub Jelinek <jakub@redhat.com>
PR middle-end/77959 PR middle-end/77959
......
/* PR c/44782 */ /* PR c/44782 */
/* { dg-do compile } */ /* { dg-do compile } */
/* { dg-options "-fmax-errors=3" } */ /* { dg-options "-fmax-errors=3 -Wall" } */
void foo (unsigned int i, unsigned int j) void foo (unsigned int i, unsigned int j)
{ {
(i) (); /* { dg-error "" } */ (i) (); /* { dg-error "" } */
(j) (); /* { dg-error "" } */ (j) (); /* { dg-error "" } */
(i+j) (); /* { dg-error "" } */
i + j; /* { dg-warning "" } */
(k) (); /* { dg-error "" } */
/* Make sure we see the notes related to the final error we emit. */
/* { dg-message "identifier" "" { target c } 12 } */
/* Warnings after the final error should not appear. */
i + j; /* no warning. */
(i*j) (); /* no error here due to -fmax-errors */ (i*j) (); /* no error here due to -fmax-errors */
} /* { dg-prune-output "compilation terminated" } */ } /* { dg-prune-output "compilation terminated" } */
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