Hello Martin, Honza,

I noticed most of the cgraph and IPA files use xstrdup for cgraph node
names when printing to dump_file. Very leaky...

What is the reason for all those xstrdups? I couldn't think of any.

Thoughts?

Ciao!
Steven
        * cgraph.c (cgraph_node::get_create): Don't xstrdup cgraph node names.
        (cgraph_edge::make_speculative): Likewise.
        (cgraph_edge::resolve_speculation): Likewise.
        (cgraph_edge::redirect_call_stmt_to_callee): Likewise.
        (cgraph_node::dump): Likewise.
        * cgraphclones.c (symbol_table::materialize_all_clones): Likewise.
        * ipa-cp.c (perhaps_add_new_callers): Likewise.
        * ipa-inline.c (report_inline_failed_reason): Likewise.
        (want_early_inline_function_p): Likewise.
        (edge_badness): Likewise.
        (update_edge_key): Likewise.
        (flatten_function): Likewise.
        (inline_always_inline_functions): Likewise.
        (early_inline_small_functions): Likewise.
        * ipa-profile.c (ipa_profile): Likewise.
        * ipa-prop.c (ipa_print_node_jump_functions): Likewise.
        (ipa_make_edge_direct_to_target): Likewise.
        (remove_described_reference): Likewise.
        (propagate_controlled_uses): Likewise.
        * ipa-utils.c (ipa_merge_profiles): Likewise.
        * tree-sra.c (convert_callers_for_node): Likewise.

Index: cgraph.c
===================================================================
--- cgraph.c    (revision 214545)
+++ cgraph.c    (working copy)
@@ -489,11 +489,11 @@ cgraph_node::get_create (tree decl)
       if (dump_file)
        fprintf (dump_file, "Introduced new external node "
                 "(%s/%i) and turned into root of the clone tree.\n",
-                xstrdup (node->name ()), node->order);
+                node->name (), node->order);
     }
   else if (dump_file)
     fprintf (dump_file, "Introduced new external node "
-            "(%s/%i).\n", xstrdup (node->name ()),
+            "(%s/%i).\n", node->name (),
             node->order);
   return node;
 }
@@ -1036,8 +1036,8 @@ cgraph_edge::make_speculative (cgraph_node *n2, gc
     {
       fprintf (dump_file, "Indirect call -> speculative call"
               " %s/%i => %s/%i\n",
-              xstrdup (n->name ()), n->order,
-              xstrdup (n2->name ()), n2->order);
+              n->name (), n->order,
+              n2->name (), n2->order);
     }
   speculative = true;
   e2 = n->create_edge (n2, call_stmt, direct_count, direct_frequency);
@@ -1155,16 +1155,16 @@ cgraph_edge::resolve_speculation (tree callee_decl
            {
              fprintf (dump_file, "Speculative indirect call %s/%i => %s/%i has 
"
                       "turned out to have contradicting known target ",
-                      xstrdup (edge->caller->name ()), edge->caller->order,
-                      xstrdup (e2->callee->name ()), e2->callee->order);
+                      edge->caller->name (), edge->caller->order,
+                      e2->callee->name (), e2->callee->order);
              print_generic_expr (dump_file, callee_decl, 0);
              fprintf (dump_file, "\n");
            }
          else
            {
              fprintf (dump_file, "Removing speculative call %s/%i => %s/%i\n",
-                      xstrdup (edge->caller->name ()), edge->caller->order,
-                      xstrdup (e2->callee->name ()), e2->callee->order);
+                      edge->caller->name (), edge->caller->order,
+                      e2->callee->name (), e2->callee->order);
            }
        }
     }
@@ -1284,9 +1284,9 @@ cgraph_edge::redirect_call_stmt_to_callee (void)
          if (dump_file)
            fprintf (dump_file, "Not expanding speculative call of %s/%i -> 
%s/%i\n"
                     "Type mismatch.\n",
-                    xstrdup (e->caller->name ()),
+                    e->caller->name (),
                     e->caller->order,
-                    xstrdup (e->callee->name ()),
+                    e->callee->name (),
                     e->callee->order);
          e = e->resolve_speculation ();
          /* We are producing the final function body and will throw away the
@@ -1303,9 +1303,9 @@ cgraph_edge::redirect_call_stmt_to_callee (void)
            fprintf (dump_file,
                     "Expanding speculative call of %s/%i -> %s/%i count:"
                     "%"PRId64"\n",
-                    xstrdup (e->caller->name ()),
+                    e->caller->name (),
                     e->caller->order,
-                    xstrdup (e->callee->name ()),
+                    e->callee->name (),
                     e->callee->order,
                     (int64_t)e->count);
          gcc_assert (e2->speculative);
@@ -1353,8 +1353,8 @@ cgraph_edge::redirect_call_stmt_to_callee (void)
   if (symtab->dump_file)
     {
       fprintf (symtab->dump_file, "updating call of %s/%i -> %s/%i: ",
-              xstrdup (e->caller->name ()), e->caller->order,
-              xstrdup (e->callee->name ()), e->callee->order);
+              e->caller->name (), e->caller->order,
+              e->callee->name (), e->callee->order);
       print_gimple_stmt (symtab->dump_file, e->call_stmt, 0, dump_flags);
       if (e->callee->clone.combined_args_to_skip)
        {
@@ -1870,9 +1870,9 @@ cgraph_node::dump (FILE *f)
 
   if (global.inlined_to)
     fprintf (f, "  Function %s/%i is inline copy in %s/%i\n",
-            xstrdup (name ()),
+            name (),
             order,
-            xstrdup (global.inlined_to->name ()),
+            global.inlined_to->name (),
             global.inlined_to->order);
   if (clone_of)
     fprintf (f, "  Clone of %s/%i\n",
Index: cgraphclones.c
===================================================================
--- cgraphclones.c      (revision 214545)
+++ cgraphclones.c      (working copy)
@@ -1053,8 +1053,8 @@ symbol_table::materialize_all_clones (void)
                  if (symtab->dump_file)
                    {
                      fprintf (symtab->dump_file, "cloning %s to %s\n",
-                              xstrdup (node->clone_of->name ()),
-                              xstrdup (node->name ()));
+                              node->clone_of->name (),
+                              node->name ());
                      if (node->clone.tree_map)
                        {
                          unsigned int i;
Index: ipa-cp.c
===================================================================
--- ipa-cp.c    (revision 214545)
+++ ipa-cp.c    (working copy)
@@ -3362,9 +3362,9 @@ perhaps_add_new_callers (struct cgraph_node *node,
                  if (dump_file)
                    fprintf (dump_file, " - adding an extra caller %s/%i"
                             " of %s/%i\n",
-                            xstrdup (cs->caller->name ()),
+                            cs->caller->name (),
                             cs->caller->order,
-                            xstrdup (val->spec_node->name ()),
+                            val->spec_node->name (),
                             val->spec_node->order);
 
                  cs->redirect_callee (val->spec_node);
Index: ipa-inline.c
===================================================================
--- ipa-inline.c        (revision 214545)
+++ ipa-inline.c        (working copy)
@@ -230,8 +230,8 @@ report_inline_failed_reason (struct cgraph_edge *e
   if (dump_file)
     {
       fprintf (dump_file, "  not inlinable: %s/%i -> %s/%i, %s\n",
-              xstrdup (e->caller->name ()), e->caller->order,
-              xstrdup (e->callee->name ()), e->callee->order,
+              e->caller->name (), e->caller->order,
+              e->callee->name (), e->callee->order,
               cgraph_inline_failed_string (e->inline_failed));
     }
 }
@@ -469,9 +469,9 @@ want_early_inline_function_p (struct cgraph_edge *
          if (dump_file)
            fprintf (dump_file, "  will not early inline: %s/%i->%s/%i, "
                     "call is cold and code would grow by %i\n",
-                    xstrdup (e->caller->name ()),
+                    e->caller->name (),
                     e->caller->order,
-                    xstrdup (callee->name ()), callee->order,
+                    callee->name (), callee->order,
                     growth);
          want_inline = false;
        }
@@ -480,9 +480,9 @@ want_early_inline_function_p (struct cgraph_edge *
          if (dump_file)
            fprintf (dump_file, "  will not early inline: %s/%i->%s/%i, "
                     "growth %i exceeds --param early-inlining-insns\n",
-                    xstrdup (e->caller->name ()),
+                    e->caller->name (),
                     e->caller->order,
-                    xstrdup (callee->name ()), callee->order,
+                    callee->name (), callee->order,
                     growth);
          want_inline = false;
        }
@@ -493,9 +493,9 @@ want_early_inline_function_p (struct cgraph_edge *
            fprintf (dump_file, "  will not early inline: %s/%i->%s/%i, "
                     "growth %i exceeds --param early-inlining-insns "
                     "divided by number of calls\n",
-                    xstrdup (e->caller->name ()),
+                    e->caller->name (),
                     e->caller->order,
-                    xstrdup (callee->name ()), callee->order,
+                    callee->name (), callee->order,
                     growth);
          want_inline = false;
        }
@@ -911,9 +911,9 @@ edge_badness (struct cgraph_edge *edge, bool dump)
   if (dump)
     {
       fprintf (dump_file, "    Badness calculation for %s/%i -> %s/%i\n",
-              xstrdup (edge->caller->name ()),
+              edge->caller->name (),
               edge->caller->order,
-              xstrdup (callee->name ()),
+              callee->name (),
               edge->callee->order);
       fprintf (dump_file, "      size growth %i, time %i ",
               growth,
@@ -1078,9 +1078,9 @@ update_edge_key (fibheap_t heap, struct cgraph_edg
            {
              fprintf (dump_file,
                       "  decreasing badness %s/%i -> %s/%i, %i to %i\n",
-                      xstrdup (edge->caller->name ()),
+                      edge->caller->name (),
                       edge->caller->order,
-                      xstrdup (edge->callee->name ()),
+                      edge->callee->name (),
                       edge->callee->order,
                       (int)n->key,
                       badness);
@@ -1095,9 +1095,9 @@ update_edge_key (fibheap_t heap, struct cgraph_edg
         {
           fprintf (dump_file,
                    "  enqueuing call %s/%i -> %s/%i, badness %i\n",
-                   xstrdup (edge->caller->name ()),
+                   edge->caller->name (),
                    edge->caller->order,
-                   xstrdup (edge->callee->name ()),
+                   edge->callee->name (),
                    edge->callee->order,
                    badness);
         }
@@ -1885,8 +1885,8 @@ flatten_function (struct cgraph_node *node, bool e
          if (dump_file)
            fprintf (dump_file,
                     "Not inlining %s into %s to avoid cycle.\n",
-                    xstrdup (callee->name ()),
-                    xstrdup (e->caller->name ()));
+                    callee->name (),
+                    e->caller->name ());
          e->inline_failed = CIF_RECURSIVE_INLINING;
          continue;
        }
@@ -1926,8 +1926,8 @@ flatten_function (struct cgraph_node *node, bool e
          recursing through the original node if the node was cloned.  */
       if (dump_file)
        fprintf (dump_file, " Inlining %s into %s.\n",
-                xstrdup (callee->name ()),
-                xstrdup (e->caller->name ()));
+                callee->name (),
+                e->caller->name ());
       orig_callee = callee;
       inline_call (e, true, NULL, NULL, false);
       if (e->callee != orig_callee)
@@ -2305,8 +2305,8 @@ inline_always_inline_functions (struct cgraph_node
 
       if (dump_file)
        fprintf (dump_file, "  Inlining %s into %s (always_inline).\n",
-                xstrdup (e->callee->name ()),
-                xstrdup (e->caller->name ()));
+                e->callee->name (),
+                e->caller->name ());
       inline_call (e, true, NULL, NULL, false);
       inlined = true;
     }
@@ -2357,8 +2357,8 @@ early_inline_small_functions (struct cgraph_node *
 
       if (dump_file)
        fprintf (dump_file, " Inlining %s into %s.\n",
-                xstrdup (callee->name ()),
-                xstrdup (e->caller->name ()));
+                callee->name (),
+                e->caller->name ());
       inline_call (e, true, NULL, NULL, true);
       inlined = true;
     }
Index: ipa-profile.c
===================================================================
--- ipa-profile.c       (revision 214545)
+++ ipa-profile.c       (working copy)
@@ -590,8 +590,8 @@ ipa_profile (void)
                    {
                      fprintf (dump_file, "Indirect call -> direct call from"
                               " other module %s/%i => %s/%i, prob %3.2f\n",
-                              xstrdup (n->name ()), n->order,
-                              xstrdup (n2->name ()), n2->order,
+                              n->name (), n->order,
+                              n2->name (), n2->order,
                               e->indirect_info->common_target_probability
                               / (float)REG_BR_PROB_BASE);
                    }
Index: ipa-prop.c
===================================================================
--- ipa-prop.c  (revision 214545)
+++ ipa-prop.c  (working copy)
@@ -384,8 +384,8 @@ ipa_print_node_jump_functions (FILE *f, struct cgr
        continue;
 
       fprintf (f, "    callsite  %s/%i -> %s/%i : \n",
-              xstrdup (node->name ()), node->order,
-              xstrdup (cs->callee->name ()),
+              node->name (), node->order,
+              cs->callee->name (),
               cs->callee->order);
       ipa_print_node_jump_functions_for_edge (f, cs);
     }
@@ -2857,9 +2857,9 @@ ipa_make_edge_direct_to_target (struct cgraph_edge
          if (dump_file)
            fprintf (dump_file, "ipa-prop: Discovered call to a known target "
                     "(%s/%i -> %s/%i) but can not refer to it. Giving up.\n",
-                    xstrdup (ie->caller->name ()),
+                    ie->caller->name (),
                     ie->caller->order,
-                    xstrdup (ie->callee->name ()),
+                    ie->callee->name (),
                     ie->callee->order);
          return NULL;
        }
@@ -2880,9 +2880,9 @@ ipa_make_edge_direct_to_target (struct cgraph_edge
       fprintf (dump_file, "ipa-prop: Discovered %s call to a known target "
               "(%s/%i -> %s/%i), for stmt ",
               ie->indirect_info->polymorphic ? "a virtual" : "an indirect",
-              xstrdup (ie->caller->name ()),
+              ie->caller->name (),
               ie->caller->order,
-              xstrdup (callee->name ()),
+              callee->name (),
               callee->order);
       if (ie->call_stmt)
        print_gimple_stmt (dump_file, ie->call_stmt, 2, TDF_SLIM);
@@ -2953,8 +2953,8 @@ remove_described_reference (symtab_node *symbol, s
   to_del->remove_reference ();
   if (dump_file)
     fprintf (dump_file, "ipa-prop: Removed a reference from %s/%i to %s.\n",
-            xstrdup (origin->caller->name ()),
-            origin->caller->order, xstrdup (symbol->name ()));
+            origin->caller->name (),
+            origin->caller->order, symbol->name ());
   return true;
 }
 
@@ -3353,9 +3353,9 @@ propagate_controlled_uses (struct cgraph_edge *cs)
                  if (dump_file)
                    fprintf (dump_file, "ipa-prop: Removing cloning-created "
                             "reference from %s/%i to %s/%i.\n",
-                            xstrdup (new_root->name ()),
+                            new_root->name (),
                             new_root->order,
-                            xstrdup (n->name ()), n->order);
+                            n->name (), n->order);
                  ref->remove_reference ();
                }
            }
@@ -3394,9 +3394,9 @@ propagate_controlled_uses (struct cgraph_edge *cs)
                            fprintf (dump_file, "ipa-prop: Removing "
                                     "cloning-created reference "
                                     "from %s/%i to %s/%i.\n",
-                                    xstrdup (clone->name ()),
+                                    clone->name (),
                                     clone->order,
-                                    xstrdup (n->name ()),
+                                    n->name (),
                                     n->order);
                          ref->remove_reference ();
                        }
Index: ipa-utils.c
===================================================================
--- ipa-utils.c (revision 214545)
+++ ipa-utils.c (working copy)
@@ -410,8 +410,8 @@ ipa_merge_profiles (struct cgraph_node *dst,
   if (symtab->dump_file)
     {
       fprintf (symtab->dump_file, "Merging profiles of %s/%i to %s/%i\n",
-              xstrdup (src->name ()), src->order,
-              xstrdup (dst->name ()), dst->order);
+              src->name (), src->order,
+              dst->name (), dst->order);
     }
   dst->count += src->count;
 
Index: tree-sra.c
===================================================================
--- tree-sra.c  (revision 214545)
+++ tree-sra.c  (working copy)
@@ -4828,9 +4828,9 @@ convert_callers_for_node (struct cgraph_node *node
 
       if (dump_file)
        fprintf (dump_file, "Adjusting call %s/%i -> %s/%i\n",
-                xstrdup (cs->caller->name ()),
+                cs->caller->name (),
                 cs->caller->order,
-                xstrdup (cs->callee->name ()),
+                cs->callee->name (),
                 cs->callee->order);
 
       ipa_modify_call_arguments (cs, cs->call_stmt, *adjustments);

Reply via email to