new file mode 100644
@@ -0,0 +1,38 @@
+// { dg-do run }
+/* 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 *dummy __attribute__((unused)))
+{
+ int bar;
+ __transaction { 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 { bar = f(20); }
+ if (bar != 200)
+ abort();
+
+ return 0;
+}