|  | /* { dg-do run } */ | 
|  | /* { dg-require-effective-target tls_runtime } */ | 
|  |  | 
|  | #include <omp.h> | 
|  | #include <stdlib.h> | 
|  |  | 
|  | int t = 128; | 
|  | #pragma omp threadprivate (t) | 
|  |  | 
|  | int | 
|  | main () | 
|  | { | 
|  | #pragma omp parallel | 
|  | t = omp_get_thread_num () + 256; | 
|  | #pragma omp parallel | 
|  | if (t != omp_get_thread_num () + 256) | 
|  | abort (); | 
|  | omp_pause_resource (omp_pause_soft, omp_get_initial_device ()); | 
|  | /* This goes beyond what is required by the standard, we actually | 
|  | check if the threads other than the initial one have been destroyed.  */ | 
|  | #pragma omp parallel | 
|  | { | 
|  | if (omp_get_thread_num () != 0 && t != 128) | 
|  | abort (); | 
|  | t = omp_get_thread_num () + 384; | 
|  | } | 
|  | #pragma omp parallel | 
|  | if (t != omp_get_thread_num () + 384) | 
|  | abort (); | 
|  | omp_pause_resource_all (omp_pause_hard); | 
|  | #pragma omp parallel | 
|  | { | 
|  | if (omp_get_thread_num () != 0 && t != 128) | 
|  | abort (); | 
|  | t = omp_get_thread_num () + 512; | 
|  | } | 
|  | #pragma omp parallel | 
|  | if (t != omp_get_thread_num () + 512) | 
|  | abort (); | 
|  | return 0; | 
|  | } |