diff options
author | pmarlier <pmarlier@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-21 15:15:51 +0000 |
---|---|---|
committer | pmarlier <pmarlier@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-21 15:15:51 +0000 |
commit | 10073be587a45c11adac98f15f0e75b3e44221e7 (patch) | |
tree | 3b48a4821601e6c6f0d63ed980e4b7be7be2c319 | |
parent | 26035a127744b16c4b7c407e54415267fbce9939 (diff) | |
download | gcc-10073be587a45c11adac98f15f0e75b3e44221e7.tar.gz |
2012-05-21 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-21 Patrick Marlier <patrick.marlier@gmail.com>
* gcc.dg/tm/indirect-2.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@187721 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tm/indirect-2.c | 15 | ||||
-rw-r--r-- | gcc/trans-mem.c | 2 |
4 files changed, 26 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5caba373927..2a80c0c81d9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-05-21 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-21 H.J. Lu <hongjiu.lu@intel.com> Backport from mainline diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8fa135cca1c..19326eba770 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-05-21 Patrick Marlier <patrick.marlier@gmail.com> + + * gcc.dg/tm/indirect-2.c: New test. + 2012-05-21 H.J. Lu <hongjiu.lu@intel.com> Backport from mainline 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 2badf250650..24073fa4eb7 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; |