* tree.c (set_call_expr_flags): Fix handling of TM_PURE.
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Aug 2013 08:11:41 +0000 (08:11 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 30 Aug 2013 08:11:41 +0000 (08:11 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@202098 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree.c

index 5720a2a..171988a 100644 (file)
@@ -1,3 +1,7 @@
+2013-08-29  Jan Hubicka  <jh@suse.cz>
+
+       * tree.c (set_call_expr_flags): Fix handling of TM_PURE.
+
 2013-08-30  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/58228
index f0ee309..5ed0d1d 100644 (file)
@@ -9794,7 +9794,10 @@ build_common_tree_nodes (bool signed_char, bool short_double)
   }
 }
 
-/* Modify DECL for given flags.  */
+/* Modify DECL for given flags.
+   TM_PURE attribute is set only on types, so the function will modify
+   DECL's type when ECF_TM_PURE is used.  */
+
 void
 set_call_expr_flags (tree decl, int flags)
 {
@@ -9818,8 +9821,7 @@ set_call_expr_flags (tree decl, int flags)
     DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("leaf"),
                                        NULL, DECL_ATTRIBUTES (decl));
   if ((flags & ECF_TM_PURE) && flag_tm)
-    DECL_ATTRIBUTES (decl) = tree_cons (get_identifier ("transaction_pure"),
-                                       NULL, DECL_ATTRIBUTES (decl));
+    apply_tm_attr (decl, get_identifier ("transaction_pure"));
   /* Looping const or pure is implied by noreturn.
      There is currently no way to declare looping const or looping pure alone.  */
   gcc_assert (!(flags & ECF_LOOPING_CONST_OR_PURE)