re PR debug/49831 (arm-linux-gnueabi bootstrap failures due to ICE in dwarf2cfi.c...
authorRichard Henderson <rth@redhat.com>
Mon, 25 Jul 2011 03:35:05 +0000 (20:35 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Mon, 25 Jul 2011 03:35:05 +0000 (20:35 -0700)
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
gcc/dwarf2cfi.c

index b88996e5befe1b3719863ca97fca480c7db20c74..31c140d9d3569e15c233ffcd3fe01ac0c81d539a 100644 (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
index de19d06a08eec7606a82816eefbc21baaae62cfd..57fe566baf9890973d9421654d745f800af98d53 100644 (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;
     }
 }