Commit a1566696 by Segher Boessenkool Committed by Segher Boessenkool

dwarf2cfi: Dump row differences before asserting

If maybe_record_trace_start fails because the CFI is inconsistent on two
paths into a block it currently just ICEs.  This changes it to also dump
the CFI on those two paths in the dump file; debugging it without that
information is hopeless.


	* dwarf2cfi.c (dump_cfi_row): Add forward declaration.
	(maybe_record_trace_start): If the CFI is different on the new and
	old paths, print out both to the dump file before ICEing.

From-SVN: r242046
parent 8ebd1b31
2016-11-10 Segher Boessenkool <segher@kernel.crashing.org>
* dwarf2cfi.c (dump_cfi_row): Add forward declaration.
(maybe_record_trace_start): If the CFI is different on the new and
old paths, print out both to the dump file before ICEing.
2016-11-10 Vladimir Makarov <vmakarov@redhat.com> 2016-11-10 Vladimir Makarov <vmakarov@redhat.com>
* target.def (additional_allocno_class_p): New. * target.def (additional_allocno_class_p): New.
...@@ -2268,6 +2268,8 @@ add_cfis_to_fde (void) ...@@ -2268,6 +2268,8 @@ add_cfis_to_fde (void)
} }
} }
static void dump_cfi_row (FILE *f, dw_cfi_row *row);
/* If LABEL is the start of a trace, then initialize the state of that /* If LABEL is the start of a trace, then initialize the state of that
trace from CUR_TRACE and CUR_ROW. */ trace from CUR_TRACE and CUR_ROW. */
...@@ -2311,7 +2313,21 @@ maybe_record_trace_start (rtx_insn *start, rtx_insn *origin) ...@@ -2311,7 +2313,21 @@ maybe_record_trace_start (rtx_insn *start, rtx_insn *origin)
/* We ought to have the same state incoming to a given trace no /* We ought to have the same state incoming to a given trace no
matter how we arrive at the trace. Anything else means we've matter how we arrive at the trace. Anything else means we've
got some kind of optimization error. */ got some kind of optimization error. */
gcc_checking_assert (cfi_row_equal_p (cur_row, ti->beg_row)); #if CHECKING_P
if (!cfi_row_equal_p (cur_row, ti->beg_row))
{
if (dump_file)
{
fprintf (dump_file, "Inconsistent CFI state!\n");
fprintf (dump_file, "SHOULD have:\n");
dump_cfi_row (dump_file, ti->beg_row);
fprintf (dump_file, "DO have:\n");
dump_cfi_row (dump_file, cur_row);
}
gcc_unreachable ();
}
#endif
/* The args_size is allowed to conflict if it isn't actually used. */ /* The args_size is allowed to conflict if it isn't actually used. */
if (ti->beg_true_args_size != args_size) if (ti->beg_true_args_size != args_size)
......
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