diff options
author | Martin Liska <mliska@suse.cz> | 2015-04-05 19:17:29 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2015-04-05 17:17:29 +0000 |
commit | 8fc8c7e7d14ff1b9891b6de2d2bbe51ad5af4f70 (patch) | |
tree | 462bc3752bbf0982b38517f9b4c8608b352b56bc | |
parent | 7870a3118b1b857ad373364f80875183e0587102 (diff) | |
download | gcc-8fc8c7e7d14ff1b9891b6de2d2bbe51ad5af4f70.zip gcc-8fc8c7e7d14ff1b9891b6de2d2bbe51ad5af4f70.tar.gz gcc-8fc8c7e7d14ff1b9891b6de2d2bbe51ad5af4f70.tar.bz2 |
re PR middle-end/65665 (g++.dg/torture/pr64378.C -O2 -flto -fno-use-linker-plugin -flto-partition=none)
Fix PR ipa/65665
PR ipa/65665
* ipa-icf.c (sem_function::equals_wpa): Verify that IPA CP
has computed data structure.
(sem_item_optimizer::update_hash_by_addr_refs): Likewise.
From-SVN: r221872
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ipa-icf.c | 10 |
2 files changed, 13 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a0e973b..f9cb04c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2015-04-05 Martin Liska <mliska@suse.cz> + + PR ipa/65665 + * ipa-icf.c (sem_function::equals_wpa): Verify that IPA CP + has computed data structure. + (sem_item_optimizer::update_hash_by_addr_refs): Likewise. + 2015-04-04 Jan Hubicka <hubicka@ucw.cz> * invoke.texi (inline-unit-growth): Increase growth to 20% diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c index 8626730..8f8a0cf 100644 --- a/gcc/ipa-icf.c +++ b/gcc/ipa-icf.c @@ -535,7 +535,8 @@ sem_function::equals_wpa (sem_item *item, && (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE || TREE_CODE (TREE_TYPE (item->decl)) == METHOD_TYPE) && (ipa_node_params_sum == NULL - || ipa_is_param_used (IPA_NODE_REF (dyn_cast <cgraph_node *>(node)), + || IPA_NODE_REF (get_node ())->descriptors.is_empty () + || ipa_is_param_used (IPA_NODE_REF (get_node ()), 0)) && compare_polymorphic_p ()) { @@ -2501,14 +2502,15 @@ sem_item_optimizer::update_hash_by_addr_refs () m_items[i]->update_hash_by_addr_refs (m_symtab_node_map); if (m_items[i]->type == FUNC) { + cgraph_node *cnode = dyn_cast <cgraph_node *> (m_items[i]->node); + if (TREE_CODE (TREE_TYPE (m_items[i]->decl)) == METHOD_TYPE && contains_polymorphic_type_p (method_class_type (TREE_TYPE (m_items[i]->decl))) && (DECL_CXX_CONSTRUCTOR_P (m_items[i]->decl) || ((ipa_node_params_sum == NULL - || ipa_is_param_used ( - IPA_NODE_REF - (dyn_cast <cgraph_node *>(m_items[i]->node)), 0)) + || IPA_NODE_REF (cnode)->descriptors.is_empty () + || ipa_is_param_used (IPA_NODE_REF (cnode), 0)) && static_cast<sem_function *> (m_items[i]) ->compare_polymorphic_p ()))) { |