From 149e741d2c9a871c5ad7a9c6a02b340e224c3f1e Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sun, 24 Jul 2011 20:35:05 -0700 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/dwarf2cfi.c | 16 +++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b88996e5bef..31c140d9d35 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-07-24 Richard Henderson + + PR debug/49831 + * dwarf2cfi.c (connect_traces): Allow unvisited traces. Skip + them entirely. + 2011-07-24 Richard Henderson PR debug/49825 diff --git a/gcc/dwarf2cfi.c b/gcc/dwarf2cfi.c index de19d06a08e..57fe566baf9 100644 --- a/gcc/dwarf2cfi.c +++ b/gcc/dwarf2cfi.c @@ -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; } } -- 2.30.2