[backport r176730 to fix PR49831 regression on ARM ] gcc/ 2011-07-24 Richard Henderson PR debug/49831 * dwarf2cfi.c (connect_traces): Allow unvisited traces. Skip them entirely. --- gcc-4.7-20110723/gcc/dwarf2cfi.c.~1~ 2011-07-23 22:49:33.000000000 +0200 +++ gcc-4.7-20110723/gcc/dwarf2cfi.c 2011-08-25 16:26:59.000000000 +0200 @@ -2622,14 +2622,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 @@ -2658,6 +2666,8 @@ connect_traces (void) } while (note != add_cfi_insn); } + + prev_ti = ti; } }