PR debug/49831
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 25 Jul 2011 03:35:05 +0000 (03:35 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 25 Jul 2011 03:35:05 +0000 (03:35 +0000)
        * 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

gcc/ChangeLog
gcc/dwarf2cfi.c

index b88996e..31c140d 100644 (file)
@@ -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.
index de19d06..57fe566 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;
     }
 }