From 8730965e4297b5f96210b2e80e70c5b302486723 Mon Sep 17 00:00:00 2001 From: Patrick Marlier Date: Thu, 17 May 2012 02:57:56 +0000 Subject: [PATCH] [multiple changes] 2012-05-16 Dave Boutcher Patrick Marlier * trans-mem.c (ipa_tm_transform_clone): Transform functions with indirect calls. testsuite/ 2012-05-16 Patrick Marlier * gcc.dg/tm/indirect-2.c: New test. From-SVN: r187621 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/tm/indirect-2.c | 15 +++++++++++++++ gcc/trans-mem.c | 2 +- 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/tm/indirect-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 412e661949a..f4ddc3a2082 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-05-16 Dave Boutcher + Patrick Marlier + + * trans-mem.c (ipa_tm_transform_clone): Transform functions with + indirect calls. + 2012-05-16 H.J. Lu * configure: Regenerated. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 90d94b003cb..2c33c31e896 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-05-16 Patrick Marlier + + * gcc.dg/tm/indirect-2.c: New test. + 2012-05-16 Bill Schmidt 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 00000000000..dd7168f0519 --- /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 0a021b421e3..51dd7fe13ed 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; -- 2.30.2