mirror of
https://github.com/autc04/Retro68.git
synced 2024-12-27 23:31:44 +00:00
41 lines
727 B
C
41 lines
727 B
C
/* { dg-do run } */
|
|
/* { dg-options "-pthread" } */
|
|
/* { dg-skip-if "PR libitm/51822" { *-*-* } } */
|
|
/* Tests static constructors inside of transactional code. */
|
|
|
|
#include <pthread.h>
|
|
#include <stdlib.h>
|
|
|
|
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;
|
|
}
|