Follow-up of Dave's patch with a testcase.
Functions with indirect calls must be transactified (transformed).
Tested on i686.
Ok for trunk?
--
Patrick
2012-05-15 Dave Boutcher daveboutc...@gmail.com
Patrick Marlier patrick.marl...@gmail.com
* trans-mem.c (ipa_tm_transform_clone): Transform functions with
indirect calls.
2012-05-15 Patrick Marlier patrick.marl...@gmail.com
* gcc.dg/tm/indirect-2.c: New test.
On 05/08/2012 06:40 PM, Dave Boutcher wrote:
gcc/trans-mem.c |2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc/trans-mem.c b/gcc/trans-mem.c
index 2badf25..24073fa 100644
--- a/gcc/trans-mem.c
+++ b/gcc/trans-mem.c
@@ -4721,7 +4721,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-decl;
Index: testsuite/gcc.dg/tm/indirect-2.c
===
--- testsuite/gcc.dg/tm/indirect-2.c (revision 0)
+++ testsuite/gcc.dg/tm/indirect-2.c (revision 0)
@@ -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: trans-mem.c
===
--- trans-mem.c (revision 187371)
+++ trans-mem.c (working copy)
@@ -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;