[PR c++/84702] ICE with default tmpl arg of overload set
[official-gcc.git] / gcc / testsuite / g++.dg / tls / thread_local4g.C
blobf6a5d4c5b69ce65c14c8a793ebe4d16a41c5e609
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-effective-target non_bionic }
8 // { dg-require-cxa-atexit "" }
9 // { dg-options -pthread }
10 // { dg-add-options tls }
12 #include <pthread.h>
13 #include <unistd.h>
15 int c;
16 int d;
17 struct A
19   A() { ++c; }
20   ~A() { ++d; }
23 thread_local A a;
25 void *thread_main(void *)
27   A *ap = &a;
28   while (true)
29     {
30       pthread_testcancel();
31       sleep (1);
32     }
35 int main()
37   pthread_t thread;
38   pthread_create (&thread, 0, thread_main, 0);
39   pthread_cancel(thread);
40   pthread_join(thread, 0);
41   pthread_create (&thread, 0, thread_main, 0);
42   pthread_cancel(thread);
43   pthread_join(thread, 0);
45    if (c != 2 || d != 2)
46      __builtin_abort();