Fix for PR ipa/63851 and ipa/63852.
authorMartin Liska <mliska@suse.cz>
Tue, 23 Dec 2014 09:30:20 +0000 (10:30 +0100)
committerMartin Liska <marxin@gcc.gnu.org>
Tue, 23 Dec 2014 09:30:20 +0000 (09:30 +0000)
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

gcc/ChangeLog
gcc/ipa-icf-gimple.c
gcc/ipa-icf.c

index 9f0408506a52a95235a7fe303f54944fb232fc1b..133d8aa763f5de920a236fe752273632ecd01bc6 100644 (file)
@@ -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
index fa2c3534d8dc214ea425cfffdef21b297baea386..6689463585e77083439b30a6e0a6a520878559e9 100644 (file)
@@ -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");
 
index 6cdc21b1ae6a075a837cb90598ee5d640e087d62..b8ef6e03fb43824dcc6a299909e25527f13b5c93 100644 (file)
@@ -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);