Commit 1aec2ecc by Martin Liska Committed by Martin Liska

re PR ipa/65432 (Invalid read of size 1:…

re PR ipa/65432 (Invalid read of size 1: ipa_icf::sem_item_optimizer::merge_classes(unsigned int) (ipa-icf.c:2958))

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
parent faf4220c
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> 2015-03-18 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/65450 PR tree-optimization/65450
......
...@@ -553,12 +553,11 @@ cgraph_node::get_create (tree decl) ...@@ -553,12 +553,11 @@ cgraph_node::get_create (tree decl)
if (dump_file) if (dump_file)
fprintf (dump_file, "Introduced new external node " fprintf (dump_file, "Introduced new external node "
"(%s/%i) and turned into root of the clone tree.\n", "(%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) else if (dump_file)
fprintf (dump_file, "Introduced new external node " fprintf (dump_file, "Introduced new external node "
"(%s/%i).\n", xstrdup_for_dump (node->name ()), "(%s/%i).\n", node->name (), node->order);
node->order);
return node; return node;
} }
......
...@@ -239,12 +239,12 @@ sem_item::dump (void) ...@@ -239,12 +239,12 @@ sem_item::dump (void)
if (dump_file) if (dump_file)
{ {
fprintf (dump_file, "[%s] %s (%u) (tree:%p)\n", type == FUNC ? "func" : "var", 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, " hash: %u\n", get_hash ());
fprintf (dump_file, " references: "); fprintf (dump_file, " references: ");
for (unsigned i = 0; i < refs.length (); i++) 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 ? "," : ""); i < refs.length() - 1 ? "," : "");
fprintf (dump_file, "\n"); fprintf (dump_file, "\n");
...@@ -575,8 +575,13 @@ sem_function::equals (sem_item *item, ...@@ -575,8 +575,13 @@ sem_function::equals (sem_item *item,
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, fprintf (dump_file,
"Equals called for:%s:%s (%u:%u) (%s:%s) with result: %s\n\n", "Equals called for:%s:%s (%u:%u) (%s:%s) with result: %s\n\n",
name(), item->name (), node->order, item->node->order, asm_name (), xstrdup_for_dump (node->name()),
item->asm_name (), eq ? "true" : "false"); 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; return eq;
} }
...@@ -1522,8 +1527,11 @@ sem_variable::equals (sem_item *item, ...@@ -1522,8 +1527,11 @@ sem_variable::equals (sem_item *item,
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, fprintf (dump_file,
"Equals called for vars:%s:%s (%u:%u) (%s:%s) with result: %s\n\n", "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 (), xstrdup_for_dump (node->name()),
item->asm_name (), ret ? "true" : "false"); 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; return ret;
} }
...@@ -1995,8 +2003,8 @@ sem_item_optimizer::read_section (lto_file_decl_data *file_data, ...@@ -1995,8 +2003,8 @@ sem_item_optimizer::read_section (lto_file_decl_data *file_data,
gcc_assert (node->definition); gcc_assert (node->definition);
if (dump_file) if (dump_file)
fprintf (dump_file, "Symbol added:%s (tree: %p, uid:%u)\n", node->asm_name (), fprintf (dump_file, "Symbol added:%s (tree: %p, uid:%u)\n",
(void *) node->decl, node->order); node->asm_name (), (void *) node->decl, node->order);
if (is_a<cgraph_node *> (node)) if (is_a<cgraph_node *> (node))
{ {
...@@ -2259,7 +2267,7 @@ sem_item_optimizer::parse_funcs_and_vars (void) ...@@ -2259,7 +2267,7 @@ sem_item_optimizer::parse_funcs_and_vars (void)
m_symtab_node_map.put (cnode, f); m_symtab_node_map.put (cnode, f);
if (dump_file) 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)) if (dump_file && (dump_flags & TDF_DETAILS))
f->dump_to_file (dump_file); f->dump_to_file (dump_file);
...@@ -2955,9 +2963,11 @@ sem_item_optimizer::merge_classes (unsigned int prev_class_count) ...@@ -2955,9 +2963,11 @@ sem_item_optimizer::merge_classes (unsigned int prev_class_count)
if (dump_file) if (dump_file)
{ {
fprintf (dump_file, "Semantic equality hit:%s->%s\n", 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", 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))) if (lookup_attribute ("no_icf", DECL_ATTRIBUTES (alias->decl)))
...@@ -2993,7 +3003,8 @@ congruence_class::dump (FILE *file, unsigned int indent) const ...@@ -2993,7 +3003,8 @@ congruence_class::dump (FILE *file, unsigned int indent) const
FPUTS_SPACES (file, indent + 2, ""); FPUTS_SPACES (file, indent + 2, "");
for (unsigned i = 0; i < members.length (); i++) 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); members[i]->node->order);
fprintf (file, "\n"); fprintf (file, "\n");
......
...@@ -171,18 +171,6 @@ public: ...@@ -171,18 +171,6 @@ public:
/* Add reference to a semantic TARGET. */ /* Add reference to a semantic TARGET. */
void add_reference (sem_item *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. */ /* Fast equality function based on knowledge known in WPA. */
virtual bool equals_wpa (sem_item *item, virtual bool equals_wpa (sem_item *item,
hash_map <symtab_node *, sem_item *> &ignored_nodes) = 0; hash_map <symtab_node *, sem_item *> &ignored_nodes) = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment