re PR ipa/65432 (Invalid read of size 1: ipa_icf::sem_item_optimizer::merge_classes...
authorMartin Liska <mliska@suse.cz>
Wed, 18 Mar 2015 14:16:59 +0000 (15:16 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Wed, 18 Mar 2015 14:16:59 +0000 (14:16 +0000)
Fix PR ipa/65432

PR ipa/65432
* cgraph.c (cgraph_node::get_create): Remove unnecessary
xstrdup_for_dump wrapper.
* ipa-icf.c (sem_item::dump): Use symtab_node::name instead of
sem_item::name.
(sem_function::equals): Wrap symtab_node::name and symtab_node::asm_name
with xstrdup_for_dump.
(sem_variable::equals): Likewise.
(sem_item_optimizer::read_section): Use symtab_node::name instead of
sem_item::name.
(sem_item_optimizer::parse_funcs_and_vars): Likewise.
(sem_item_optimizer::merge_classes): Wrap symtab_node::name and
symtab_node::asm_name with xstrdup_for_dump.
(congruence_class::dump): Use symtab_node::name instead of
sem_item::name.
* ipa-icf.h (symtab_node::name): Remove.
(symtab_node::asm_name): Likewise.

From-SVN: r221491

gcc/ChangeLog
gcc/cgraph.c
gcc/ipa-icf.c
gcc/ipa-icf.h

index 0e9955bcdc49dcbd7afd2144a947bc5bcf415568..7325636dd25aa4ab32b3c8a61eff7bec5403cad7 100644 (file)
@@ -1,3 +1,23 @@
+2015-03-18  Martin Liska  <mliska@suse.cz>
+
+       PR ipa/65432
+       * cgraph.c (cgraph_node::get_create): Remove unnecessary
+       xstrdup_for_dump wrapper.
+       * ipa-icf.c (sem_item::dump): Use symtab_node::name instead of
+       sem_item::name.
+       (sem_function::equals): Wrap symtab_node::name and symtab_node::asm_name
+       with xstrdup_for_dump.
+       (sem_variable::equals): Likewise.
+       (sem_item_optimizer::read_section): Use symtab_node::name instead of
+       sem_item::name.
+       (sem_item_optimizer::parse_funcs_and_vars): Likewise.
+       (sem_item_optimizer::merge_classes): Wrap symtab_node::name and
+       symtab_node::asm_name with xstrdup_for_dump.
+       (congruence_class::dump): Use symtab_node::name instead of
+       sem_item::name.
+       * ipa-icf.h (symtab_node::name): Remove.
+       (symtab_node::asm_name): Likewise.
+
 2015-03-18  Jakub Jelinek  <jakub@redhat.com>
 
        PR tree-optimization/65450
index ede58bf5aaf8f4e71b2f3e7bf6da5e9981edb86b..e2958c4a508526fb8b5dccc5c7ff4c0f2fb6da43 100644 (file)
@@ -553,12 +553,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_for_dump (node->name ()), node->order);
+                node->name (), node->order);
     }
   else if (dump_file)
     fprintf (dump_file, "Introduced new external node "
-            "(%s/%i).\n", xstrdup_for_dump (node->name ()),
-            node->order);
+            "(%s/%i).\n", node->name (), node->order);
   return node;
 }
 
index 25b83062d3f48bdd4bdb9d01a49b55ae1e6e50f3..f68d23cf4dc62d247fb8ac509afd100214c733e2 100644 (file)
@@ -239,12 +239,12 @@ sem_item::dump (void)
   if (dump_file)
     {
       fprintf (dump_file, "[%s] %s (%u) (tree:%p)\n", type == FUNC ? "func" : "var",
-              name(), node->order, (void *) node->decl);
+              node->name(), node->order, (void *) node->decl);
       fprintf (dump_file, "  hash: %u\n", get_hash ());
       fprintf (dump_file, "  references: ");
 
       for (unsigned i = 0; i < refs.length (); i++)
-       fprintf (dump_file, "%s%s ", refs[i]->name (),
+       fprintf (dump_file, "%s%s ", refs[i]->node->name (),
                 i < refs.length() - 1 ? "," : "");
 
       fprintf (dump_file, "\n");
@@ -575,8 +575,13 @@ sem_function::equals (sem_item *item,
   if (dump_file && (dump_flags & TDF_DETAILS))
     fprintf (dump_file,
             "Equals called for:%s:%s (%u:%u) (%s:%s) with result: %s\n\n",
-            name(), item->name (), node->order, item->node->order, asm_name (),
-            item->asm_name (), eq ? "true" : "false");
+            xstrdup_for_dump (node->name()),
+            xstrdup_for_dump (item->node->name ()),
+            node->order,
+            item->node->order,
+            xstrdup_for_dump (node->asm_name ()),
+            xstrdup_for_dump (item->node->asm_name ()),
+            eq ? "true" : "false");
 
   return eq;
 }
@@ -1522,8 +1527,11 @@ sem_variable::equals (sem_item *item,
   if (dump_file && (dump_flags & TDF_DETAILS))
     fprintf (dump_file,
             "Equals called for vars:%s:%s (%u:%u) (%s:%s) with result: %s\n\n",
-            name(), item->name (), node->order, item->node->order, asm_name (),
-            item->asm_name (), ret ? "true" : "false");
+            xstrdup_for_dump (node->name()),
+            xstrdup_for_dump (item->node->name ()),
+            node->order, item->node->order,
+            xstrdup_for_dump (node->asm_name ()),
+            xstrdup_for_dump (item->node->asm_name ()), ret ? "true" : "false");
 
   return ret;
 }
@@ -1995,8 +2003,8 @@ sem_item_optimizer::read_section (lto_file_decl_data *file_data,
       gcc_assert (node->definition);
 
       if (dump_file)
-       fprintf (dump_file, "Symbol added:%s (tree: %p, uid:%u)\n", node->asm_name (),
-                (void *) node->decl, node->order);
+       fprintf (dump_file, "Symbol added:%s (tree: %p, uid:%u)\n",
+                node->asm_name (), (void *) node->decl, node->order);
 
       if (is_a<cgraph_node *> (node))
        {
@@ -2259,7 +2267,7 @@ sem_item_optimizer::parse_funcs_and_vars (void)
          m_symtab_node_map.put (cnode, f);
 
          if (dump_file)
-           fprintf (dump_file, "Parsed function:%s\n", f->asm_name ());
+           fprintf (dump_file, "Parsed function:%s\n", f->node->asm_name ());
 
          if (dump_file && (dump_flags & TDF_DETAILS))
            f->dump_to_file (dump_file);
@@ -2955,9 +2963,11 @@ sem_item_optimizer::merge_classes (unsigned int prev_class_count)
            if (dump_file)
              {
                fprintf (dump_file, "Semantic equality hit:%s->%s\n",
-                        source->name (), alias->name ());
+                        xstrdup_for_dump (source->node->name ()),
+                        xstrdup_for_dump (alias->node->name ()));
                fprintf (dump_file, "Assembler symbol names:%s->%s\n",
-                        source->asm_name (), alias->asm_name ());
+                        xstrdup_for_dump (source->node->asm_name ()),
+                        xstrdup_for_dump (alias->node->asm_name ()));
              }
 
            if (lookup_attribute ("no_icf", DECL_ATTRIBUTES (alias->decl)))
@@ -2993,7 +3003,8 @@ congruence_class::dump (FILE *file, unsigned int indent) const
 
   FPUTS_SPACES (file, indent + 2, "");
   for (unsigned i = 0; i < members.length (); i++)
-    fprintf (file, "%s(%p/%u) ", members[i]->asm_name (), (void *) members[i]->decl,
+    fprintf (file, "%s(%p/%u) ", members[i]->node->asm_name (),
+            (void *) members[i]->decl,
             members[i]->node->order);
 
   fprintf (file, "\n");
index c51bb4a4299c3ab245bafa3f15e997ad4bdce207..8245b5445cc78d80d05bd9aa928ce8edafe3654d 100644 (file)
@@ -171,18 +171,6 @@ public:
   /* Add reference to a semantic TARGET.  */
   void add_reference (sem_item *target);
 
-  /* Gets symbol name of the item.  */
-  const char *name (void)
-  {
-    return node->name ();
-  }
-
-  /* Gets assembler name of the item.  */
-  const char *asm_name (void)
-  {
-    return node->asm_name ();
-  }
-
   /* Fast equality function based on knowledge known in WPA.  */
   virtual bool equals_wpa (sem_item *item,
                           hash_map <symtab_node *, sem_item *> &ignored_nodes) = 0;