| // { dg-do compile } |
| // { dg-options "-fgnu-tm -O -fdump-tree-tmmark" } |
| |
| struct TrueFalse |
| { |
| static bool v() { return true; } |
| }; |
| |
| int global; |
| |
| template<typename T> int foo() |
| { |
| __transaction_atomic { global += 2; } |
| return __transaction_atomic (global + 1); |
| } |
| |
| template<typename T> int bar() __transaction_atomic |
| { |
| return global + 3; |
| } |
| |
| template<typename T> void bar2() __transaction_atomic |
| { |
| global += 4; |
| } |
| |
| int f1() |
| { |
| bar2<TrueFalse>(); |
| return foo<TrueFalse>() + bar<TrueFalse>(); |
| } |
| |
| /* 4 transactions overall, two of them write to global: */ |
| /* { dg-final { scan-tree-dump-times "ITM_RU4\\s*\\(&global" 4 "tmmark" } } */ |
| /* { dg-final { scan-tree-dump-times "ITM_WU4\\s*\\(&global" 2 "tmmark" } } */ |