OSDN Git Service

PR c++/15815
[pf3gnuchains/gcc-fork.git] / gcc / tree-ssa-dce.c
index 90bcf21..e9ead5c 100644 (file)
@@ -432,7 +432,7 @@ find_obviously_necessary_stmts (struct edge_list *el)
       tree phi;
 
       /* Check any PHI nodes in the block.  */
-      for (phi = phi_nodes (bb); phi; phi = TREE_CHAIN (phi))
+      for (phi = phi_nodes (bb); phi; phi = PHI_CHAIN (phi))
        {
          NECESSARY (phi) = 0;
 
@@ -482,6 +482,14 @@ mark_control_dependent_edges_necessary (basic_block bb, struct edge_list *el)
 {
   int edge_number;
 
+#ifdef ENABLE_CHECKING
+  if (bb == EXIT_BLOCK_PTR)
+    abort ();
+#endif
+
+  if (bb == ENTRY_BLOCK_PTR)
+    return;
+
   EXECUTE_IF_CONTROL_DEPENDENT (bb->index, edge_number,
     {
       tree t;
@@ -492,7 +500,7 @@ mark_control_dependent_edges_necessary (basic_block bb, struct edge_list *el)
       SET_BIT (last_stmt_necessary, cd_bb->index);
 
       t = last_stmt (cd_bb);
-      if (is_ctrl_stmt (t))
+      if (t && is_ctrl_stmt (t))
        mark_stmt_necessary (t, true);
     });
 }
@@ -656,7 +664,7 @@ remove_dead_phis (basic_block bb)
 
       if (! NECESSARY (phi))
        {
-         tree next = TREE_CHAIN (phi);
+         tree next = PHI_CHAIN (phi);
 
          if (dump_file && (dump_flags & TDF_DETAILS))
            {
@@ -672,7 +680,7 @@ remove_dead_phis (basic_block bb)
       else
        {
          prev = phi;
-         phi = TREE_CHAIN (phi);
+         phi = PHI_CHAIN (phi);
        }
     }
 }
@@ -791,7 +799,7 @@ tree_dce_init (bool aggressive)
       sbitmap_zero (last_stmt_necessary);
     }
 
-  processed = sbitmap_alloc (highest_ssa_version + 1);
+  processed = sbitmap_alloc (num_ssa_names + 1);
   sbitmap_zero (processed);
 
   VARRAY_TREE_INIT (worklist, 64, "work list");