Hello. Following patch fixed the issue, where we have to check if function summary for IPA CP has been already created.
Tested on x86_64-linux-pc w/o any new regression introduced. Ready for trunk? Thanks, Martin
>From c33680093e67328863836a845e847bf1b1b23d0e Mon Sep 17 00:00:00 2001 From: mliska <mli...@suse.cz> Date: Sun, 29 Mar 2015 20:20:33 +0200 Subject: [PATCH] Fix PR65557. gcc/ChangeLog: 2015-03-29 Martin Liska <mli...@suse.cz> PR ipa/65557 * ipa-icf.c (sem_function::equals_wpa): Check if IPA CP has already filled up function summary. gcc/testsuite/ChangeLog: 2015-03-29 Martin Liska <mli...@suse.cz> * g++.dg/ipa/pr65557.C: New test. --- gcc/ipa-icf.c | 2 +- gcc/testsuite/g++.dg/ipa/pr65557.C | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/ipa/pr65557.C diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c index ad868e1..ee7dabe 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 ()) 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; -- 2.1.4