aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2011-07-24 20:35:05 -0700
committerRichard Henderson <rth@gcc.gnu.org>2011-07-24 20:35:05 -0700
commit149e741d2c9a871c5ad7a9c6a02b340e224c3f1e (patch)
treeedaac187ab7ab954523b81582bcb347e7ba52515
parent981dc73548710dcf4df7754d60e95f6b5fa48910 (diff)
downloadgcc-149e741d2c9a871c5ad7a9c6a02b340e224c3f1e.zip
gcc-149e741d2c9a871c5ad7a9c6a02b340e224c3f1e.tar.gz
gcc-149e741d2c9a871c5ad7a9c6a02b340e224c3f1e.tar.bz2
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/dwarf2cfi.c16
2 files changed, 19 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b88996e..31c140d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
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
* dwarf2cfi.c (dwarf2out_stack_adjust): Move A_O_A test earlier.
(dwarf2out_notice_stack_adjust): Use args_size from call_insn.
diff --git a/gcc/dwarf2cfi.c b/gcc/dwarf2cfi.c
index de19d06..57fe566 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;
}
}