* g++.dg/tls/thread_local-order1.C: Add dg-require-cxa-atexit.
[official-gcc.git] / gcc / testsuite / g++.dg / tls / thread_local4g.C
blob59041867c2d86c5b484f0f031f725e1ad0ab547e
1 // Test for cleanups with pthread_cancel.
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() { ++d; }
22 thread_local A a;
24 void *thread_main(void *)
26   A *ap = &a;
27   while (true)
28     {
29       pthread_testcancel();
30       sleep (1);
31     }
34 int main()
36   pthread_t thread;
37   pthread_create (&thread, 0, thread_main, 0);
38   pthread_cancel(thread);
39   pthread_join(thread, 0);
40   pthread_create (&thread, 0, thread_main, 0);
41   pthread_cancel(thread);
42   pthread_join(thread, 0);
44    if (c != 2 || d != 2)
45      __builtin_abort();