| // { dg-do compile { target c++11 } } |
| // { dg-options "-fgnu-tm -O -fdump-tree-tmmark -fdump-tree-tmlower" } |
| |
| struct TrueFalse |
| { |
| static constexpr bool v() { return true; } |
| }; |
| |
| int global; |
| |
| template<typename T> int foo() |
| { |
| __transaction_atomic noexcept(T::v()) { global += 1; } |
| return __transaction_atomic noexcept(T::v()) (global + 2); |
| } |
| |
| int f1() |
| { |
| return foo<TrueFalse>(); |
| } |
| |
| int f2() |
| { |
| return __transaction_atomic noexcept(true) (global + 3) |
| + __transaction_atomic noexcept(TrueFalse::v()) (global + 4); |
| } |
| |
| int f3() |
| { |
| __transaction_atomic noexcept(true) { global += 5; } |
| __transaction_atomic noexcept(TrueFalse::v()) { global += 6; } |
| return global; |
| } |
| |
| /* { dg-final { scan-tree-dump-times "eh_must_not_throw" 12 "tmlower" } } */ |
| /* { dg-final { scan-tree-dump-times "ITM_RU" 6 "tmmark" } } */ |