diff options
author | Martin Liska <mliska@suse.cz> | 2014-12-23 10:30:20 +0100 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2014-12-23 09:30:20 +0000 |
commit | 34b42fb0ea1bdcdc0eb9dc5d90eeb780fa017923 (patch) | |
tree | 21cf4b962e8b9239dfce8203f5cc735f3677ff0c | |
parent | 960389139b28506953843f0891925a58121443a7 (diff) | |
download | gcc-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/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/ipa-icf-gimple.c | 3 | ||||
-rw-r--r-- | gcc/ipa-icf.c | 8 |
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); |