aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2014-12-23 10:30:20 +0100
committerMartin Liska <marxin@gcc.gnu.org>2014-12-23 09:30:20 +0000
commit34b42fb0ea1bdcdc0eb9dc5d90eeb780fa017923 (patch)
tree21cf4b962e8b9239dfce8203f5cc735f3677ff0c
parent960389139b28506953843f0891925a58121443a7 (diff)
downloadgcc-34b42fb0ea1bdcdc0eb9dc5d90eeb780fa017923.zip
gcc-34b42fb0ea1bdcdc0eb9dc5d90eeb780fa017923.tar.gz
gcc-34b42fb0ea1bdcdc0eb9dc5d90eeb780fa017923.tar.bz2
Fix for PR ipa/63851 and ipa/63852.
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. From-SVN: r219042
-rw-r--r--gcc/ChangeLog9
-rw-r--r--gcc/ipa-icf-gimple.c3
-rw-r--r--gcc/ipa-icf.c8
3 files changed, 20 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9f04085..133d8aa 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2014-12-23 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.
+
2014-12-22 John David Anglin <danglin@gcc.gnu.org>
PR target/55023
diff --git a/gcc/ipa-icf-gimple.c b/gcc/ipa-icf-gimple.c
index fa2c353..6689463 100644
--- a/gcc/ipa-icf-gimple.c
+++ b/gcc/ipa-icf-gimple.c
@@ -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");
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index 6cdc21b..b8ef6e0 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -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);