]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ipa-pure-const.c (propagate_pure_const, [...]): Do not modify inline clones.
authorJan Hubicka <hubicka@ucw.cz>
Wed, 26 Mar 2014 02:07:51 +0000 (03:07 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 26 Mar 2014 02:07:51 +0000 (02:07 +0000)
* ipa-pure-const.c (propagate_pure_const, propagate_nothrow):
Do not modify inline clones.

From-SVN: r208830

gcc/ChangeLog
gcc/ipa-pure-const.c

index 596e25d96d22cf920189bb877e7f567b65a1fd6f..bc74777659b538310f177e963850423e2d44133f 100644 (file)
@@ -1,3 +1,8 @@
+2014-03-25  Jan Hubicka  <hubicka@ucw.cz>
+
+       * ipa-pure-const.c (propagate_pure_const, propagate_nothrow):
+       Do not modify inline clones.
+
 2014-03-25  Jakub Jelinek  <jakub@redhat.com>
 
        * config/i386/i386.md (general_sext_operand): New mode attr.
index 296f9c07bb149f236ac177299a32db1e081c218d..7d35880996503f1ba44590c6862876cf67428f72 100644 (file)
@@ -1327,35 +1327,39 @@ propagate_pure_const (void)
          w_l->pure_const_state = this_state;
          w_l->looping = this_looping;
 
-         switch (this_state)
-           {
-           case IPA_CONST:
-             if (!TREE_READONLY (w->decl))
-               {
-                 warn_function_const (w->decl, !this_looping);
-                 if (dump_file)
-                   fprintf (dump_file, "Function found to be %sconst: %s\n",
-                            this_looping ? "looping " : "",
-                            w->name ());
-               }
-             cgraph_set_const_flag (w, true, this_looping);
-             break;
+         /* Inline clones share declaration with their offline copies;
+            do not modify their declarations since the offline copy may
+            be different.  */
+         if (!w->global.inlined_to)
+           switch (this_state)
+             {
+             case IPA_CONST:
+               if (!TREE_READONLY (w->decl))
+                 {
+                   warn_function_const (w->decl, !this_looping);
+                   if (dump_file)
+                     fprintf (dump_file, "Function found to be %sconst: %s\n",
+                              this_looping ? "looping " : "",
+                              w->name ());
+                 }
+               cgraph_set_const_flag (w, true, this_looping);
+               break;
 
-           case IPA_PURE:
-             if (!DECL_PURE_P (w->decl))
-               {
-                 warn_function_pure (w->decl, !this_looping);
-                 if (dump_file)
-                   fprintf (dump_file, "Function found to be %spure: %s\n",
-                            this_looping ? "looping " : "",
-                            w->name ());
-               }
-             cgraph_set_pure_flag (w, true, this_looping);
-             break;
+             case IPA_PURE:
+               if (!DECL_PURE_P (w->decl))
+                 {
+                   warn_function_pure (w->decl, !this_looping);
+                   if (dump_file)
+                     fprintf (dump_file, "Function found to be %spure: %s\n",
+                              this_looping ? "looping " : "",
+                              w->name ());
+                 }
+               cgraph_set_pure_flag (w, true, this_looping);
+               break;
 
-           default:
-             break;
-           }
+             default:
+               break;
+             }
          w_info = (struct ipa_dfs_info *) w->aux;
          w = w_info->next_cycle;
        }
@@ -1448,10 +1452,16 @@ propagate_nothrow (void)
          funct_state w_l = get_function_state (w);
          if (!can_throw && !TREE_NOTHROW (w->decl))
            {
-             cgraph_set_nothrow_flag (w, true);
-             if (dump_file)
-               fprintf (dump_file, "Function found to be nothrow: %s\n",
-                        w->name ());
+             /* Inline clones share declaration with their offline copies;
+                do not modify their declarations since the offline copy may
+                be different.  */
+             if (!w->global.inlined_to)
+               {
+                 cgraph_set_nothrow_flag (w, true);
+                 if (dump_file)
+                   fprintf (dump_file, "Function found to be nothrow: %s\n",
+                            w->name ());
+               }
            }
          else if (can_throw && !TREE_NOTHROW (w->decl))
            w_l->can_throw = true;