| // Test for cleanups in the main thread without -pthread. |
| |
| /* wrapping doesn't reflect _exit value */ |
| // { dg-do run { target { c++11 && unwrapped } } } |
| // { dg-add-options tls } |
| // { dg-require-effective-target tls_runtime } |
| |
| extern "C" void _exit (int); |
| |
| int c; |
| struct A |
| { |
| A() { ++c; } |
| ~A() { if (c == 1) _exit(0); } |
| }; |
| |
| void f() |
| { |
| thread_local A a; |
| } |
| |
| void *thread_main(void *) |
| { |
| f(); f(); f(); |
| return 0; |
| } |
| |
| int main() |
| { |
| thread_main(0); |
| |
| // The dtor for a in the main thread is run after main exits, so we |
| // return 1 now and override the return value with _exit above. |
| return 1; |
| } |