re PR debug/49831 (arm-linux-gnueabi bootstrap failures due to ICE in dwarf2cfi.c connect_traces)

PR debug/49831
        * dwarf2cfi.c (connect_traces): Allow unvisited traces.  Skip
        them entirely.

Constant pools are emitted in such a way as to be indistinguishable
from regular instructions, and these constant pools are, naturally,
not reachable as code.

From-SVN: r176730
This commit is contained in:
Richard Henderson 2011-07-24 20:35:05 -07:00 committed by Richard Henderson
parent 981dc73548
commit 149e741d2c
2 changed files with 19 additions and 3 deletions

View file

@ -1,3 +1,9 @@
2011-07-24 Richard Henderson <rth@redhat.com>
PR debug/49831
* dwarf2cfi.c (connect_traces): Allow unvisited traces. Skip
them entirely.
2011-07-24 Richard Henderson <rth@redhat.com>
PR debug/49825

View file

@ -2641,14 +2641,22 @@ connect_traces (void)
prev_ti = VEC_index (dw_trace_info, trace_info, 0);
for (i = 1; i < n; ++i, prev_ti = ti)
for (i = 1; i < n; ++i)
{
dw_cfi_row *old_row;
ti = VEC_index (dw_trace_info, trace_info, i);
/* We must have both queued and processed every trace. */
gcc_assert (ti->beg_row && ti->end_row);
/* ??? Ideally, we should have both queued and processed. However
the current representation of constant pools on various targets
is indistinguishable from unreachable code. Assume for the
moment that we can simply skip over such traces. */
/* ??? Consider creating a DATA_INSN rtx code to indicate that
these are not "real" instructions, and should not be considered.
This could be generically useful for tablejump data as well. */
if (ti->beg_row == NULL)
continue;
gcc_assert (ti->end_row != NULL);
/* In dwarf2out_switch_text_section, we'll begin a new FDE
for the portion of the function in the alternate text
@ -2677,6 +2685,8 @@ connect_traces (void)
}
while (note != add_cfi_insn);
}
prev_ti = ti;
}
}