OSDN Git Service

* configure.ac (gcc_cv_nm): Don't use an in-tree nm if
[pf3gnuchains/gcc-fork.git] / gcc / cgraphunit.c
index 2b79429..030f868 100644 (file)
@@ -171,6 +171,7 @@ static void cgraph_expand_all_functions (void);
 static void cgraph_mark_functions_to_output (void);
 static void cgraph_expand_function (struct cgraph_node *);
 static tree record_reference (tree *, int *, void *);
+static void cgraph_output_pending_asms (void);
 
 /* Records tree nodes seen in record_reference.  Simply using
    walk_tree_without_duplicates doesn't guarantee each node is visited
@@ -338,6 +339,8 @@ cgraph_assemble_pending_functions (void)
   if (flag_unit_at_a_time)
     return false;
 
+  cgraph_output_pending_asms ();
+
   while (cgraph_nodes_queue)
     {
       struct cgraph_node *n = cgraph_nodes_queue;
@@ -615,7 +618,7 @@ initialize_inline_failed (struct cgraph_node *node)
 
 /* Rebuild call edges from current function after a passes not aware
    of cgraph updating.  */
-static void
+static unsigned int
 rebuild_cgraph_edges (void)
 {
   basic_block bb;
@@ -640,6 +643,7 @@ rebuild_cgraph_edges (void)
       }
   initialize_inline_failed (node);
   gcc_assert (!node->global.inlined_to);
+  return 0;
 }
 
 struct tree_opt_pass pass_rebuild_cgraph_edges =
@@ -1140,8 +1144,7 @@ static void
 cgraph_expand_all_functions (void)
 {
   struct cgraph_node *node;
-  struct cgraph_node **order =
-    xcalloc (cgraph_n_nodes, sizeof (struct cgraph_node *));
+  struct cgraph_node **order = XCNEWVEC (struct cgraph_node *, cgraph_n_nodes);
   int order_pos = 0, new_order_pos = 0;
   int i;
 
@@ -1244,7 +1247,6 @@ cgraph_output_in_order (void)
       nodes[i].kind = ORDER_ASM;
       nodes[i].u.a = pa;
     }
-  cgraph_asm_nodes = NULL;
 
   for (i = 0; i < max; ++i)
     {
@@ -1270,6 +1272,8 @@ cgraph_output_in_order (void)
          gcc_unreachable ();
        }
     }
+
+  cgraph_asm_nodes = NULL;
 }
 
 /* Mark visibility of all functions.
@@ -1571,7 +1575,8 @@ update_call_expr (struct cgraph_node *new_version)
 
 static struct cgraph_node *
 cgraph_copy_node_for_versioning (struct cgraph_node *old_version,
-                                tree new_decl, varray_type redirect_callers)
+                                tree new_decl,
+                                VEC(cgraph_edge_p,heap) *redirect_callers)
  {
    struct cgraph_node *new_version;
    struct cgraph_edge *e, *new_e;
@@ -1610,14 +1615,12 @@ cgraph_copy_node_for_versioning (struct cgraph_node *old_version,
        if (!next_callee)
         break;
      }
-   if (redirect_callers)
-     for (i = 0; i < VARRAY_ACTIVE_SIZE (redirect_callers); i++)
-       {
-         e = VARRAY_GENERIC_PTR (redirect_callers, i);
-        /* Redirect calls to the old version node
-           to point to it's new version.  */
-         cgraph_redirect_edge_callee (e, new_version);
-       }
+   for (i = 0; VEC_iterate (cgraph_edge_p, redirect_callers, i, e); i++)
+     {
+       /* Redirect calls to the old version node to point to its new
+         version.  */
+       cgraph_redirect_edge_callee (e, new_version);
+     }
 
    return new_version;
  }
@@ -1637,7 +1640,7 @@ cgraph_copy_node_for_versioning (struct cgraph_node *old_version,
 
 struct cgraph_node *
 cgraph_function_versioning (struct cgraph_node *old_version_node,
-                           varray_type redirect_callers,
+                           VEC(cgraph_edge_p,heap) *redirect_callers,
                            varray_type tree_map)
 {
   tree old_decl = old_version_node->decl;
@@ -1688,7 +1691,7 @@ save_inline_function_body (struct cgraph_node *node)
   cgraph_lower_function (node);
 
   /* In non-unit-at-a-time we construct full fledged clone we never output to
-     assembly file.  This clone is pointed out by inline_decl of orginal function
+     assembly file.  This clone is pointed out by inline_decl of original function
      and inlining infrastructure knows how to deal with this.  */
   if (!flag_unit_at_a_time)
     {