re PR target/54061 (gcc.c-torture/compile/mipscop-*.c ICEs with -g)
[gcc.git] / gcc / cgraphbuild.c
index a847980c663ae1b2da270adf64e194b0b44569a3..024424d0671b1057384077bc1e8da775094433ea 100644 (file)
@@ -54,7 +54,7 @@ record_reference (tree *tp, int *walk_subtrees, void *data)
   tree decl;
   struct record_reference_ctx *ctx = (struct record_reference_ctx *)data;
 
-  t = canonicalize_constructor_val (t);
+  t = canonicalize_constructor_val (t, NULL);
   if (!t)
     t = *tp;
   else if (t != *tp)
@@ -84,7 +84,7 @@ record_reference (tree *tp, int *walk_subtrees, void *data)
 
       if (TREE_CODE (decl) == VAR_DECL)
        {
-         struct varpool_node *vnode = varpool_node (decl);
+         struct varpool_node *vnode = varpool_node_for_decl (decl);
          ipa_record_reference ((symtab_node)ctx->varpool_node,
                                (symtab_node)vnode,
                                IPA_REF_ADDR, NULL);
@@ -123,7 +123,7 @@ record_type_list (struct cgraph_node *node, tree list)
          type = TREE_OPERAND (type, 0);
          if (TREE_CODE (type) == VAR_DECL)
            {
-             struct varpool_node *vnode = varpool_node (type);
+             struct varpool_node *vnode = varpool_node_for_decl (type);
              ipa_record_reference ((symtab_node)node,
                                    (symtab_node)vnode,
                                    IPA_REF_ADDR, NULL);
@@ -233,7 +233,7 @@ mark_address (gimple stmt, tree addr, void *data)
   else if (addr && TREE_CODE (addr) == VAR_DECL
           && (TREE_STATIC (addr) || DECL_EXTERNAL (addr)))
     {
-      struct varpool_node *vnode = varpool_node (addr);
+      struct varpool_node *vnode = varpool_node_for_decl (addr);
 
       ipa_record_reference ((symtab_node)data,
                            (symtab_node)vnode,
@@ -262,7 +262,7 @@ mark_load (gimple stmt, tree t, void *data)
   else if (t && TREE_CODE (t) == VAR_DECL
           && (TREE_STATIC (t) || DECL_EXTERNAL (t)))
     {
-      struct varpool_node *vnode = varpool_node (t);
+      struct varpool_node *vnode = varpool_node_for_decl (t);
 
       ipa_record_reference ((symtab_node)data,
                            (symtab_node)vnode,
@@ -280,7 +280,7 @@ mark_store (gimple stmt, tree t, void *data)
   if (t && TREE_CODE (t) == VAR_DECL
       && (TREE_STATIC (t) || DECL_EXTERNAL (t)))
     {
-      struct varpool_node *vnode = varpool_node (t);
+      struct varpool_node *vnode = varpool_node_for_decl (t);
 
       ipa_record_reference ((symtab_node)data,
                            (symtab_node)vnode,
@@ -348,7 +348,7 @@ build_cgraph_edges (void)
                                      IPA_REF_ADDR, stmt);
            }
        }
-      for (gsi = gsi_start (phi_nodes (bb)); !gsi_end_p (gsi); gsi_next (&gsi))
+      for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
        walk_stmt_load_store_addr_ops (gsi_stmt (gsi), node,
                                       mark_load, mark_store, mark_address);
    }
@@ -356,7 +356,8 @@ build_cgraph_edges (void)
   /* Look for initializers of constant variables and private statics.  */
   FOR_EACH_LOCAL_DECL (cfun, ix, decl)
     if (TREE_CODE (decl) == VAR_DECL
-       && (TREE_STATIC (decl) && !DECL_EXTERNAL (decl)))
+       && (TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
+       && !DECL_HAS_VALUE_EXPR_P (decl))
       varpool_finalize_decl (decl);
   record_eh_tables (node, cfun);
 
@@ -369,6 +370,7 @@ struct gimple_opt_pass pass_build_cgraph_edges =
  {
   GIMPLE_PASS,
   "*build_cgraph_edges",                       /* name */
+  OPTGROUP_NONE,                        /* optinfo_flags */
   NULL,                                        /* gate */
   build_cgraph_edges,                  /* execute */
   NULL,                                        /* sub */
@@ -391,7 +393,7 @@ void
 record_references_in_initializer (tree decl, bool only_vars)
 {
   struct pointer_set_t *visited_nodes = pointer_set_create ();
-  struct varpool_node *node = varpool_node (decl);
+  struct varpool_node *node = varpool_node_for_decl (decl);
   struct record_reference_ctx ctx = {false, NULL};
 
   ctx.varpool_node = node;
@@ -440,7 +442,7 @@ rebuild_cgraph_edges (void)
                                         mark_store, mark_address);
 
        }
-      for (gsi = gsi_start (phi_nodes (bb)); !gsi_end_p (gsi); gsi_next (&gsi))
+      for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
        walk_stmt_load_store_addr_ops (gsi_stmt (gsi), node,
                                       mark_load, mark_store, mark_address);
     }
@@ -474,7 +476,7 @@ cgraph_rebuild_references (void)
                                         mark_store, mark_address);
 
        }
-      for (gsi = gsi_start (phi_nodes (bb)); !gsi_end_p (gsi); gsi_next (&gsi))
+      for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
        walk_stmt_load_store_addr_ops (gsi_stmt (gsi), node,
                                       mark_load, mark_store, mark_address);
     }
@@ -486,6 +488,7 @@ struct gimple_opt_pass pass_rebuild_cgraph_edges =
  {
   GIMPLE_PASS,
   "*rebuild_cgraph_edges",             /* name */
+  OPTGROUP_NONE,                        /* optinfo_flags */
   NULL,                                        /* gate */
   rebuild_cgraph_edges,                        /* execute */
   NULL,                                        /* sub */
@@ -513,6 +516,7 @@ struct gimple_opt_pass pass_remove_cgraph_callee_edges =
  {
   GIMPLE_PASS,
   "*remove_cgraph_callee_edges",               /* name */
+  OPTGROUP_NONE,                        /* optinfo_flags */
   NULL,                                        /* gate */
   remove_cgraph_callee_edges,          /* execute */
   NULL,                                        /* sub */