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;