OSDN Git Service

* config/arm/crti.asm: Give _init and _fini function type.
[pf3gnuchains/gcc-fork.git] / gcc / tree-ssa.c
index 21dc59a..1ddaf7d 100644 (file)
@@ -177,9 +177,9 @@ verify_def (basic_block bb, basic_block *definition_block, tree ssa_name,
     {
       error ("SSA_NAME_DEF_STMT is wrong");
       fprintf (stderr, "Expected definition statement:\n");
-      debug_generic_stmt (SSA_NAME_DEF_STMT (ssa_name));
+      print_generic_stmt (stderr, SSA_NAME_DEF_STMT (ssa_name), TDF_VOPS);
       fprintf (stderr, "\nActual definition statement:\n");
-      debug_generic_stmt (stmt);
+      print_generic_stmt (stderr, stmt, TDF_VOPS);
       goto err;
     }
 
@@ -189,7 +189,7 @@ err:
   fprintf (stderr, "while verifying SSA_NAME ");
   print_generic_expr (stderr, ssa_name, 0);
   fprintf (stderr, " in statement\n");
-  debug_generic_stmt (stmt);
+  print_generic_stmt (stderr, stmt, TDF_VOPS);
 
   return true;
 }
@@ -254,9 +254,9 @@ verify_use (basic_block bb, basic_block def_bb, tree ssa_name,
   if (err)
     {
       fprintf (stderr, "for SSA_NAME: ");
-      debug_generic_expr (ssa_name);
+      print_generic_expr (stderr, ssa_name, TDF_VOPS);
       fprintf (stderr, "in statement:\n");
-      debug_generic_stmt (stmt);
+      print_generic_stmt (stderr, stmt, TDF_VOPS);
     }
 
   return err;
@@ -278,9 +278,10 @@ verify_phi_args (tree phi, basic_block bb, basic_block *definition_block)
   edge e;
   bool err = false;
   int i, phi_num_args = PHI_NUM_ARGS (phi);
+  edge_iterator ei;
 
   /* Mark all the incoming edges.  */
-  for (e = bb->pred; e; e = e->pred_next)
+  FOR_EACH_EDGE (e, ei, bb->preds)
     e->aux = (void *) 1;
 
   for (i = 0; i < phi_num_args; i++)
@@ -319,14 +320,14 @@ verify_phi_args (tree phi, basic_block bb, basic_block *definition_block)
       if (err)
        {
          fprintf (stderr, "PHI argument\n");
-         debug_generic_stmt (op);
+         print_generic_stmt (stderr, op, TDF_VOPS);
          goto error;
        }
 
       e->aux = (void *) 2;
     }
 
-  for (e = bb->pred; e; e = e->pred_next)
+  FOR_EACH_EDGE (e, ei, bb->preds)
     {
       if (e->aux != (void *) 2)
        {
@@ -342,7 +343,7 @@ error:
   if (err)
     {
       fprintf (stderr, "for PHI node\n");
-      debug_generic_stmt (phi);
+      print_generic_stmt (stderr, phi, TDF_VOPS);
     }
 
 
@@ -419,6 +420,8 @@ verify_flow_sensitive_alias_info (void)
       struct ptr_info_def *pi;
 
       ptr = ssa_name (i);
+      if (!ptr)
+       continue;
       ann = var_ann (SSA_NAME_VAR (ptr));
       pi = SSA_NAME_PTR_INFO (ptr);
 
@@ -466,25 +469,26 @@ verify_flow_sensitive_alias_info (void)
          size_t j;
 
          for (j = i + 1; j < num_ssa_names; j++)
-           {
-             tree ptr2 = ssa_name (j);
-             struct ptr_info_def *pi2 = SSA_NAME_PTR_INFO (ptr2);
-
-             if (!TREE_VISITED (ptr2) || !POINTER_TYPE_P (TREE_TYPE (ptr2)))
-               continue;
-
-             if (pi2
-                 && pi2->name_mem_tag
-                 && pi2->pt_vars
-                 && bitmap_first_set_bit (pi2->pt_vars) >= 0
-                 && pi->name_mem_tag != pi2->name_mem_tag
-                 && bitmap_equal_p (pi->pt_vars, pi2->pt_vars))
-               {
-                 error ("Two pointers with different name tags and identical points-to sets");
-                 debug_variable (ptr2);
-                 goto err;
-               }
-           }
+           if (ssa_name (j))
+             {
+               tree ptr2 = ssa_name (j);
+               struct ptr_info_def *pi2 = SSA_NAME_PTR_INFO (ptr2);
+
+               if (!TREE_VISITED (ptr2) || !POINTER_TYPE_P (TREE_TYPE (ptr2)))
+                 continue;
+
+               if (pi2
+                   && pi2->name_mem_tag
+                   && pi2->pt_vars
+                   && bitmap_first_set_bit (pi2->pt_vars) >= 0
+                   && pi->name_mem_tag != pi2->name_mem_tag
+                   && bitmap_equal_p (pi->pt_vars, pi2->pt_vars))
+                 {
+                   error ("Two pointers with different name tags and identical points-to sets");
+                   debug_variable (ptr2);
+                   goto err;
+                 }
+             }
        }
     }
 
@@ -524,7 +528,8 @@ verify_ssa (void)
 
   /* Keep track of SSA names present in the IL.  */
   for (i = 1; i < num_ssa_names; i++)
-    TREE_VISITED (ssa_name (i)) = 0;
+    if (ssa_name (i))
+      TREE_VISITED (ssa_name (i)) = 0;
 
   calculate_dominance_info (CDI_DOMINATORS);
 
@@ -551,7 +556,7 @@ verify_ssa (void)
              && NUM_V_MAY_DEFS (STMT_V_MAY_DEF_OPS (stmt)) == 0)
            {
              error ("Statement makes aliased stores, but has no V_MAY_DEFS");
-             debug_generic_stmt (stmt);
+             print_generic_stmt (stderr, stmt, TDF_VOPS);
              goto err;
            }
            
@@ -576,10 +581,11 @@ verify_ssa (void)
     {
       edge e;
       tree phi;
+      edge_iterator ei;
       block_stmt_iterator bsi;
 
       /* Make sure that all edges have a clear 'aux' field.  */
-      for (e = bb->pred; e; e = e->pred_next)
+      FOR_EACH_EDGE (e, ei, bb->preds)
        {
          if (e->aux)
            {
@@ -627,7 +633,7 @@ verify_ssa (void)
 
       /* Verify the uses in arguments of PHI nodes at the exits from the
         block.  */
-      for (e = bb->succ; e; e = e->succ_next)
+      FOR_EACH_EDGE (e, ei, bb->succs)
        {
          for (phi = phi_nodes (e->dest); phi; phi = PHI_CHAIN (phi))
            {
@@ -1267,7 +1273,7 @@ warn_uninit (tree t, const char *msgid, location_t *locus)
     return;
 
   /* Hard register variables get their initial value from the ether.  */
-  if (DECL_HARD_REGISTER (var))
+  if (TREE_CODE (var) == VAR_DECL && DECL_HARD_REGISTER (var))
     return;
 
   /* TREE_NO_WARNING either means we already warned, or the front end