]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorPatrick Marlier <pmarlier@gcc.gnu.org>
Thu, 17 May 2012 02:57:56 +0000 (02:57 +0000)
committerPatrick Marlier <pmarlier@gcc.gnu.org>
Thu, 17 May 2012 02:57:56 +0000 (02:57 +0000)
2012-05-16  Dave Boutcher  <daveboutcher@gmail.com>
    Patrick Marlier  <patrick.marlier@gmail.com>

* trans-mem.c (ipa_tm_transform_clone): Transform functions with
indirect calls.

testsuite/
2012-05-16  Patrick Marlier  <patrick.marlier@gmail.com>

* gcc.dg/tm/indirect-2.c: New test.

From-SVN: r187621

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tm/indirect-2.c [new file with mode: 0644]
gcc/trans-mem.c

index 412e661949a5c8dffa00e321c7324888591e7d7c..f4ddc3a2082705414bb74e28cc9687ac687300a5 100644 (file)
@@ -1,3 +1,9 @@
+2012-05-16  Dave Boutcher  <daveboutcher@gmail.com>
+           Patrick Marlier  <patrick.marlier@gmail.com>
+
+       * trans-mem.c (ipa_tm_transform_clone): Transform functions with
+       indirect calls.
+
 2012-05-16  H.J. Lu  <hongjiu.lu@intel.com>
 
        * configure: Regenerated.
index 90d94b003cbef2233cffea3da45275278c7d005d..2c33c31e89677ad5a37a77a4e27d9af047c797a9 100644 (file)
@@ -1,3 +1,7 @@
+2012-05-16  Patrick Marlier  <patrick.marlier@gmail.com> 
+
+       * gcc.dg/tm/indirect-2.c: New test. 
+
 2012-05-16  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
        PR tree-optimization/53217
diff --git a/gcc/testsuite/gcc.dg/tm/indirect-2.c b/gcc/testsuite/gcc.dg/tm/indirect-2.c
new file mode 100644 (file)
index 0000000..dd7168f
--- /dev/null
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-fgnu-tm" } */
+
+void __attribute__((transaction_safe))
+foo(void);
+
+void __attribute__((transaction_safe))
+set_fn(void)
+{
+  void __attribute__((transaction_safe)) (*fn)(void);
+  fn = foo;
+  fn();
+}
+
+/* { dg-final { scan-assembler "_ITM_getTMCloneSafe" } } */
index 0a021b421e3748e78389a3931e09c156b758f452..51dd7fe13eda5dd53ce1d32f9a1d712408681a29 100644 (file)
@@ -4732,7 +4732,7 @@ ipa_tm_transform_clone (struct cgraph_node *node)
   /* If this function makes no calls and has no irrevocable blocks,
      then there's nothing to do.  */
   /* ??? Remove non-aborting top-level transactions.  */
-  if (!node->callees && !d->irrevocable_blocks_clone)
+  if (!node->callees && !node->indirect_calls && !d->irrevocable_blocks_clone)
     return;
 
   current_function_decl = d->clone->symbol.decl;