* g++.dg/tls/thread_local-order1.C: Add dg-require-cxa-atexit.
[official-gcc.git] / gcc / testsuite / g++.dg / tls / thread_local5g.C
blob0fb6ceaac5e0824547be46d78321d58263483e62
1 // Test for cleanups in the main thread, too.
3 // { dg-do run }
4 // { dg-require-effective-target c++11 }
5 // { dg-require-effective-target tls_runtime }
6 // { dg-require-effective-target pthread }
7 // { dg-require-alias }
8 // { dg-require-cxa-atexit "" }
9 // { dg-options -pthread }
11 #include <pthread.h>
12 #include <unistd.h>
14 int c;
15 int d;
16 struct A
18   A() { ++c; }
19   ~A() {
20     if (++d == 3)
21       _exit (0);
22   }
25 thread_local A a;
27 void *thread_main(void *)
29   A* ap = &a;
32 int main()
34   pthread_t thread;
35   thread_main(0);
36   pthread_create (&thread, 0, thread_main, 0);
37   pthread_join(thread, 0);
38   pthread_create (&thread, 0, thread_main, 0);
39   pthread_join(thread, 0);
41   // The dtor for a in the main thread is run after main exits, so we
42   // return 1 now and override the return value with _exit above.
43   if (c != 3 || d != 2)
44     __builtin_abort();
45   return 1;