aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2015-03-31 18:03:03 +0200
committerMartin Liska <marxin@gcc.gnu.org>2015-03-31 16:03:03 +0000
commit12cc8c723ed0dccdbb6b2b590706b1344d468c55 (patch)
tree4db3c8bb3a6a22a76ab87c5de040de8ce921cc8d /gcc
parent78f1b5234a80f335b60b8687d1d6705aa262ea99 (diff)
downloadgcc-12cc8c723ed0dccdbb6b2b590706b1344d468c55.zip
gcc-12cc8c723ed0dccdbb6b2b590706b1344d468c55.tar.gz
gcc-12cc8c723ed0dccdbb6b2b590706b1344d468c55.tar.bz2
re PR ipa/65557 (ICE: SIGSEGV in hash_table<>::find_slot_with_hash() with -fdevirtualize -fipa-cp -fipa-icf-functions)
Fix PR65557. * ipa-icf.c (sem_function::equals_wpa): Check if IPA CP has already filled up function summary. (sem_item_optimizer::update_hash_by_addr_refs): Likewise. * g++.dg/ipa/pr65557.C: New test. From-SVN: r221796
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/ipa-icf.c4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/ipa/pr65557.C19
4 files changed, 32 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e37abf9..150525b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2015-03-31 Martin Liska <mliska@suse.cz>
+
+ PR ipa/65557
+ * ipa-icf.c (sem_function::equals_wpa): Check if IPA CP
+ has already filled up function summary.
+ (sem_item_optimizer::update_hash_by_addr_refs): Likewise.
+
2015-03-31 Richard Biener <rguenther@suse.de>
* tree-sra.c (create_access_replacement): Drop under-/over-alignment
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index ad868e1..8626730 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -534,7 +534,7 @@ sem_function::equals_wpa (sem_item *item,
if (opt_for_fn (decl, flag_devirtualize)
&& (TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE
|| TREE_CODE (TREE_TYPE (item->decl)) == METHOD_TYPE)
- && (!flag_ipa_cp
+ && (ipa_node_params_sum == NULL
|| ipa_is_param_used (IPA_NODE_REF (dyn_cast <cgraph_node *>(node)),
0))
&& compare_polymorphic_p ())
@@ -2505,7 +2505,7 @@ sem_item_optimizer::update_hash_by_addr_refs ()
&& contains_polymorphic_type_p
(method_class_type (TREE_TYPE (m_items[i]->decl)))
&& (DECL_CXX_CONSTRUCTOR_P (m_items[i]->decl)
- || ((!flag_ipa_cp
+ || ((ipa_node_params_sum == NULL
|| ipa_is_param_used (
IPA_NODE_REF
(dyn_cast <cgraph_node *>(m_items[i]->node)), 0))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b623636..5d0d3b4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2015-03-31 Martin Liska <mliska@suse.cz>
+
+ * g++.dg/ipa/pr65557.C: New test.
+
2015-03-31 Dominik Vogt <vogt@linux.vnet.ibm.com>
* gcc.target/s390/hotpatch-25.c: New test.
diff --git a/gcc/testsuite/g++.dg/ipa/pr65557.C b/gcc/testsuite/g++.dg/ipa/pr65557.C
new file mode 100644
index 0000000..2250bb0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/pr65557.C
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-ipa-icf-details" } */
+
+struct S0
+{
+ S0 ()
+ {
+ }
+};
+
+struct S1
+{
+ S1 ()
+ {
+ }
+};
+
+S0 s0;
+S1 s1;