diagnostic-core.h (internal_error_no_backtrace): New prototype.
* diagnostic-core.h (internal_error_no_backtrace): New prototype. * diagnostic.def (DK_ICE_NOBT): New kind. * diagnostic.c (diagnostic_action_after_output): Handle DK_ICE_NOBT like DK_ICE, but never print backtrace. (diagnostic_report_diagnostic): Handle DK_ICE_NOBT like DK_ICE. (internal_error_no_backtrace): New function. * gcc.c (execute): Use internal_error_no_backtrace instead of internal_error. fortran/ * gfc-diagnostic.def (DK_ICE_NOBT): New kind. From-SVN: r220030
This commit is contained in:
parent
652960d180
commit
b55f40c122
|
@ -1,3 +1,14 @@
|
|||
2015-01-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* diagnostic-core.h (internal_error_no_backtrace): New prototype.
|
||||
* diagnostic.def (DK_ICE_NOBT): New kind.
|
||||
* diagnostic.c (diagnostic_action_after_output): Handle DK_ICE_NOBT
|
||||
like DK_ICE, but never print backtrace.
|
||||
(diagnostic_report_diagnostic): Handle DK_ICE_NOBT like DK_ICE.
|
||||
(internal_error_no_backtrace): New function.
|
||||
* gcc.c (execute): Use internal_error_no_backtrace instead of
|
||||
internal_error.
|
||||
|
||||
2015-01-22 Jeff Law <law@redhat.com>
|
||||
|
||||
PR target/52076
|
||||
|
|
|
@ -56,6 +56,8 @@ extern const char *trim_filename (const char *);
|
|||
#endif
|
||||
extern void internal_error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2)
|
||||
ATTRIBUTE_NORETURN;
|
||||
extern void internal_error_no_backtrace (const char *, ...)
|
||||
ATTRIBUTE_GCC_DIAG(1,2) ATTRIBUTE_NORETURN;
|
||||
/* Pass one of the OPT_W* from options.h as the first parameter. */
|
||||
extern bool warning (int, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
|
||||
extern bool warning_n (location_t, int, int, const char *, const char *, ...)
|
||||
|
|
|
@ -518,9 +518,11 @@ diagnostic_action_after_output (diagnostic_context *context,
|
|||
break;
|
||||
|
||||
case DK_ICE:
|
||||
case DK_ICE_NOBT:
|
||||
{
|
||||
struct backtrace_state *state =
|
||||
backtrace_create_state (NULL, 0, bt_err_callback, NULL);
|
||||
struct backtrace_state *state = NULL;
|
||||
if (diag_kind == DK_ICE)
|
||||
state = backtrace_create_state (NULL, 0, bt_err_callback, NULL);
|
||||
int count = 0;
|
||||
if (state != NULL)
|
||||
backtrace_full (state, 2, bt_callback, bt_err_callback,
|
||||
|
@ -739,7 +741,8 @@ diagnostic_report_diagnostic (diagnostic_context *context,
|
|||
/* If we're reporting an ICE in the middle of some other error,
|
||||
try to flush out the previous error, then let this one
|
||||
through. Don't do this more than once. */
|
||||
if (diagnostic->kind == DK_ICE && context->lock == 1)
|
||||
if ((diagnostic->kind == DK_ICE || diagnostic->kind == DK_ICE_NOBT)
|
||||
&& context->lock == 1)
|
||||
pp_newline_and_flush (context->printer);
|
||||
else
|
||||
error_recursion (context);
|
||||
|
@ -812,7 +815,7 @@ diagnostic_report_diagnostic (diagnostic_context *context,
|
|||
|
||||
context->lock++;
|
||||
|
||||
if (diagnostic->kind == DK_ICE)
|
||||
if (diagnostic->kind == DK_ICE || diagnostic->kind == DK_ICE_NOBT)
|
||||
{
|
||||
#ifndef ENABLE_CHECKING
|
||||
/* When not checking, ICEs are converted to fatal errors when an
|
||||
|
@ -1239,6 +1242,23 @@ internal_error (const char *gmsgid, ...)
|
|||
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
/* Like internal_error, but no backtrace will be printed. Used when
|
||||
the internal error does not happen at the current location, but happened
|
||||
somewhere else. */
|
||||
void
|
||||
internal_error_no_backtrace (const char *gmsgid, ...)
|
||||
{
|
||||
diagnostic_info diagnostic;
|
||||
va_list ap;
|
||||
|
||||
va_start (ap, gmsgid);
|
||||
diagnostic_set_info (&diagnostic, gmsgid, &ap, input_location, DK_ICE_NOBT);
|
||||
report_diagnostic (&diagnostic);
|
||||
va_end (ap);
|
||||
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
/* Special case error functions. Most are implemented in terms of the
|
||||
above, or should be. */
|
||||
|
|
|
@ -45,3 +45,6 @@ DEFINE_DIAGNOSTIC_KIND (DK_PERMERROR, "permerror: ", NULL)
|
|||
/* This one is just for counting DK_WARNING promoted to DK_ERROR
|
||||
due to -Werror and -Werror=warning. */
|
||||
DEFINE_DIAGNOSTIC_KIND (DK_WERROR, "error: ", NULL)
|
||||
/* This is like DK_ICE, but backtrace is not printed. Used in the driver
|
||||
when reporting fatal signal in the compiler. */
|
||||
DEFINE_DIAGNOSTIC_KIND (DK_ICE_NOBT, "internal compiler error: ", "error")
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2015-01-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* gfc-diagnostic.def (DK_ICE_NOBT): New kind.
|
||||
|
||||
2015-01-23 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/60922
|
||||
|
|
|
@ -45,3 +45,6 @@ DEFINE_DIAGNOSTIC_KIND (DK_PERMERROR, "permerror", NULL)
|
|||
/* This one is just for counting DK_WARNING promoted to DK_ERROR
|
||||
due to -Werror and -Werror=warning. */
|
||||
DEFINE_DIAGNOSTIC_KIND (DK_WERROR, "error", NULL)
|
||||
/* This is like DK_ICE, but backtrace is not printed. Used in the driver
|
||||
when reporting fatal signal in the compiler. */
|
||||
DEFINE_DIAGNOSTIC_KIND (DK_ICE_NOBT, "internal compiler error", "error")
|
||||
|
|
|
@ -2912,8 +2912,9 @@ execute (void)
|
|||
}
|
||||
else
|
||||
#endif
|
||||
internal_error ("%s (program %s)",
|
||||
strsignal (WTERMSIG (status)), commands[i].prog);
|
||||
internal_error_no_backtrace ("%s (program %s)",
|
||||
strsignal (WTERMSIG (status)),
|
||||
commands[i].prog);
|
||||
}
|
||||
else if (WIFEXITED (status)
|
||||
&& WEXITSTATUS (status) >= MIN_FATAL_STATUS)
|
||||
|
|
Loading…
Reference in New Issue