summaryrefslogtreecommitdiff
path: root/gcc/dwarf2cfi.c
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2011-07-25 03:35:05 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2011-07-25 03:35:05 +0000
commitc247c822d1d40f209a82ad501dbb2081c9fcbee7 (patch)
treeedaac187ab7ab954523b81582bcb347e7ba52515 /gcc/dwarf2cfi.c
parentafde4c944e5baf1997a775b90322618c04dfcea9 (diff)
downloadgcc-c247c822d1d40f209a82ad501dbb2081c9fcbee7.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@176730 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dwarf2cfi.c')
-rw-r--r--gcc/dwarf2cfi.c16
1 files changed, 13 insertions, 3 deletions
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;
}
}