/* { dg-do run } */ /* { dg-options "-pthread" } */ /* { dg-skip-if "PR libitm/51822" { *-*-* } } */ /* Tests static constructors inside of transactional code. */ #include #include int f(int x) __attribute__((noinline,transaction_safe)); int f(int x) { static int y = x; return y*x; } static void *thread (void *) { int bar; __transaction_atomic { bar = f(10); } if (bar != 100) abort(); return 0; } int main() { int bar; // First, initialize y in another thread. pthread_t pt; pthread_create(&pt, NULL, thread, NULL); pthread_join(pt, NULL); // Now y should already be initialized. __transaction_atomic { bar = f(20); } if (bar != 200) abort(); return 0; }