From 75560de5f5df4a003ecf80e28bf2b926ba758e55 Mon Sep 17 00:00:00 2001 From: Alexander Monakov Date: Thu, 3 Aug 2017 16:39:47 +0300 Subject: toplev: avoid recursive emergency_dump_function * toplev.c (dumpfile.h): New include. (internal_error_reentered): New static function. Use it... (internal_error_function): ...here to handle reentered internal_error. From-SVN: r250854 --- gcc/toplev.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'gcc/toplev.c') diff --git a/gcc/toplev.c b/gcc/toplev.c index b28f184..48a79e2 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -80,6 +80,7 @@ along with GCC; see the file COPYING3. If not see #include "hsa-common.h" #include "edit-context.h" #include "tree-pass.h" +#include "dumpfile.h" #if defined(DBX_DEBUGGING_INFO) || defined(XCOFF_DEBUGGING_INFO) #include "dbxout.h" @@ -1064,11 +1065,22 @@ open_auxiliary_file (const char *ext) return file; } +/* Alternative diagnostics callback for reentered ICE reporting. */ + +static void +internal_error_reentered (diagnostic_context *, const char *, va_list *) +{ + /* Flush the dump file if emergency_dump_function itself caused an ICE. */ + if (dump_file) + fflush (dump_file); +} + /* Auxiliary callback for the diagnostics code. */ static void internal_error_function (diagnostic_context *, const char *, va_list *) { + global_dc->internal_error = internal_error_reentered; warn_if_plugins (); emergency_dump_function (); } -- cgit v1.1