+2015-01-19 Martin Liska <mliska@suse.cz>
+
+ PR ipa/64664
+ * ipa-icf.c (sem_item_optimizer::filter_removed_items):
+ Handle safe potentially removed nodes during filtering.
+
2015-01-19 Martin Liska <mliska@suse.cz>
* doc/extend.texi (no_icf): Add new attribute description.
{
sem_item *item = m_items[i];
- if (item->type == FUNC
- && !opt_for_fn (item->decl, flag_ipa_icf_functions))
- {
- remove_item (item);
- continue;
- }
-
- if (!flag_ipa_icf_variables && item->type == VAR)
- {
+ if (m_removed_items_set.contains (item->node))
+ {
remove_item (item);
continue;
- }
-
- bool no_body_function = false;
+ }
if (item->type == FUNC)
- {
+ {
cgraph_node *cnode = static_cast <sem_function *>(item)->get_node ();
- no_body_function = in_lto_p && (cnode->alias || cnode->body_removed);
- }
-
- if(!m_removed_items_set.contains (m_items[i]->node)
- && !no_body_function)
- {
- if (item->type == VAR || (!DECL_CXX_CONSTRUCTOR_P (item->decl)
- && !DECL_CXX_DESTRUCTOR_P (item->decl)))
- {
- filtered.safe_push (m_items[i]);
- continue;
- }
- }
-
- remove_item (item);
+ bool no_body_function = in_lto_p && (cnode->alias || cnode->body_removed);
+ if (no_body_function || !opt_for_fn (item->decl, flag_ipa_icf_functions)
+ || DECL_CXX_CONSTRUCTOR_P (item->decl)
+ || DECL_CXX_DESTRUCTOR_P (item->decl))
+ remove_item (item);
+ else
+ filtered.safe_push (item);
+ }
+ else /* VAR. */
+ {
+ if (!flag_ipa_icf_variables)
+ remove_item (item);
+ else
+ filtered.safe_push (item);
+ }
}
/* Clean-up of released semantic items. */