From a32fceb4af65a21b3b3d48cd3d981bcbe6faa8ab Mon Sep 17 00:00:00 2001
From: mliska <mliska@suse.cz>
Date: Mon, 22 Dec 2014 10:46:41 +0100
Subject: [PATCH] IPA ICF: Fix for PR ipa/63851 and ipa/63852.
gcc/ChangeLog:
2014-12-22 Martin Liska <mliska@suse.cz>
PR ipa/63851
PR ipa/63852
* ipa-icf.c (sem_function::merge): Ignore merge operation
for a thunk created from static chain.
* ipa-icf-gimple.c (func_checker::compatible_types_p): Verify that
types have same restrict flag.
---
gcc/ipa-icf-gimple.c | 3 +++
gcc/ipa-icf.c | 8 ++++++++
2 files changed, 11 insertions(+)
@@ -185,6 +185,9 @@ bool func_checker::compatible_types_p (tree t1, tree t2,
if (TREE_CODE (t1) != TREE_CODE (t2))
return return_false_with_msg ("different tree types");
+ if (TYPE_RESTRICT (t1) != TYPE_RESTRICT (t2))
+ return return_false_with_msg ("restrict flags are different");
+
if (!types_compatible_p (t1, t2))
return return_false_with_msg ("types are not compatible");
@@ -694,6 +694,14 @@ sem_function::merge (sem_item *alias_item)
return 0;
}
+ if (DECL_STATIC_CHAIN (alias->decl))
+ {
+ if (dump_file)
+ fprintf (dump_file, "Thunk creation is risky for static-chain functions.\n\n");
+
+ return 0;
+ }
+
alias->icf_merged = true;
ipa_merge_profiles (local_original, alias);
alias->create_wrapper (local_original);
--
2.1.2