* passes.c (emergency_dump_function): New.
* tree-pass.h (emergency_dump_function): Declare.
* plugin.c (plugins_internal_error_function): Remove.
* plugin.h (plugins_internal_error_function): Remove declaration.
* toplev.c (internal_error_function): New static function. Use it...
(general_init): ...here.
From-SVN: r248736
+2017-05-31 Alexander Monakov <amonakov@ispras.ru>
+
+ * passes.c (emergency_dump_function): New.
+ * tree-pass.h (emergency_dump_function): Declare.
+ * plugin.c (plugins_internal_error_function): Remove.
+ * plugin.h (plugins_internal_error_function): Remove declaration.
+ * toplev.c (internal_error_function): New static function. Use it...
+ (general_init): ...here.
+
2017-05-31 Graham Markall <graham.markall@embecosm.com>
* config/arc/arc.c (arc_print_operand): Handle constant operands.
#include "tree-ssa-live.h" /* For remove_unused_locals. */
#include "tree-cfgcleanup.h"
#include "insn-addr.h" /* for INSN_ADDRESSES_ALLOC. */
+#include "diagnostic-core.h" /* for fnotice */
using namespace gcc;
}
}
+/* This function is called when an internal compiler error is encountered.
+ Ensure that function dump is made available before compiler is aborted. */
+
+void
+emergency_dump_function ()
+{
+ if (!current_pass)
+ return;
+ enum opt_pass_type pt = current_pass->type;
+ fnotice (stderr, "during %s pass: %s\n",
+ pt == GIMPLE_PASS ? "GIMPLE" : pt == RTL_PASS ? "RTL" : "IPA",
+ current_pass->name);
+ if (!dump_file || !cfun)
+ return;
+ fnotice (stderr, "dump file: %s\n", dump_file_name);
+ execute_function_dump (cfun, current_pass);
+}
+
static struct profile_record *profile_record;
/* Do profile consistency book-keeping for the pass with static number INDEX.
}
-/* Likewise, as a callback from the diagnostics code. */
-
-void
-plugins_internal_error_function (diagnostic_context *context ATTRIBUTE_UNUSED,
- const char *msgid ATTRIBUTE_UNUSED,
- va_list *ap ATTRIBUTE_UNUSED)
-{
- warn_if_plugins ();
-}
-
/* The default version check. Compares every field in VERSION. */
bool
extern void dump_active_plugins (FILE *);
extern void debug_active_plugins (void);
extern void warn_if_plugins (void);
-extern void plugins_internal_error_function (diagnostic_context *,
- const char *, va_list *);
extern void print_plugins_versions (FILE *file, const char *indent);
extern void print_plugins_help (FILE *file, const char *indent);
extern void finalize_plugins (void);
#include "omp-offload.h"
#include "hsa-common.h"
#include "edit-context.h"
+#include "tree-pass.h"
#if defined(DBX_DEBUGGING_INFO) || defined(XCOFF_DEBUGGING_INFO)
#include "dbxout.h"
return file;
}
+/* Auxiliary callback for the diagnostics code. */
+
+static void
+internal_error_function (diagnostic_context *, const char *, va_list *)
+{
+ warn_if_plugins ();
+ emergency_dump_function ();
+}
+
/* Initialization of the front end environment, before command line
options are parsed. Signal handlers, internationalization etc.
ARGV0 is main's argv[0]. */
= global_options_init.x_flag_diagnostics_show_option;
global_dc->show_column
= global_options_init.x_flag_show_column;
- global_dc->internal_error = plugins_internal_error_function;
+ global_dc->internal_error = internal_error_function;
global_dc->option_enabled = option_enabled;
global_dc->option_state = &global_options;
global_dc->option_name = option_name;
extern void execute_all_ipa_stmt_fixups (struct cgraph_node *, gimple **);
extern bool pass_init_dump_file (opt_pass *);
extern void pass_fini_dump_file (opt_pass *);
+extern void emergency_dump_function (void);
extern void print_current_pass (FILE *);
extern void debug_pass (void);