diff options
author | amonakov <amonakov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-08-03 13:39:47 +0000 |
---|---|---|
committer | amonakov <amonakov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-08-03 13:39:47 +0000 |
commit | 32e4d7fa5f5ab3c82c0729b3ff2dd67d8ca473f9 (patch) | |
tree | b4be28c423eff8d34a963ed82b921519d41aec2d | |
parent | ba9f2afe27d7118526ea5ed951dcf1adf91ea59b (diff) | |
download | gcc-32e4d7fa5f5ab3c82c0729b3ff2dd67d8ca473f9.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@250854 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/toplev.c | 12 |
2 files changed, 18 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d660e83602f..9e3a8aac28d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-08-03 Alexander Monakov <amonakov@ispras.ru> + + * toplev.c (dumpfile.h): New include. + (internal_error_reentered): New static function. Use it... + (internal_error_function): ...here to handle reentered internal_error. + 2017-08-03 Richard Biener <rguenther@suse.de> PR middle-end/81148 diff --git a/gcc/toplev.c b/gcc/toplev.c index b28f1847c83..48a79e28d99 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 (); } |