aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPatrick Marlier <pmarlier@gcc.gnu.org>2012-05-17 02:57:56 +0000
committerPatrick Marlier <pmarlier@gcc.gnu.org>2012-05-17 02:57:56 +0000
commit8730965e4297b5f96210b2e80e70c5b302486723 (patch)
tree734f60a84f1033bf4846899994016b28cf532b76 /gcc
parente2f7d9f4adb2178545bed99657c45c4c76bcbbb5 (diff)
downloadgcc-8730965e4297b5f96210b2e80e70c5b302486723.zip
gcc-8730965e4297b5f96210b2e80e70c5b302486723.tar.gz
gcc-8730965e4297b5f96210b2e80e70c5b302486723.tar.bz2
[multiple changes]
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/tm/indirect-2.c15
-rw-r--r--gcc/trans-mem.c2
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 412e661..f4ddc3a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 90d94b0..2c33c31 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..dd7168f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tm/indirect-2.c
@@ -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" } } */
diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c
index 0a021b4..51dd7fe 100644
--- a/gcc/trans-mem.c
+++ b/gcc/trans-mem.c
@@ -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;