1 /* { dg-do run } */
2 /* { dg-require-effective-target tls_runtime } */
3 
4 #include <omp.h>
5 #include <stdlib.h>
6 
7 int thr;
8 #pragma omp threadprivate (thr)
9 
10 int
test(int l)11 test (int l)
12 {
13   return l || (thr != omp_get_thread_num () * 2);
14 }
15 
16 int
main(void)17 main (void)
18 {
19   int l = 0;
20 
21   omp_set_dynamic (0);
22   omp_set_num_threads (6);
23 
24   thr = 8;
25   /* Broadcast the value to all threads.  */
26 #pragma omp parallel copyin (thr)
27   ;
28 
29 #pragma omp parallel reduction (||:l)
30   {
31     /* Now test if the broadcast succeeded.  */
32     l = thr != 8;
33     thr = omp_get_thread_num () * 2;
34 #pragma omp barrier
35     l = test (l);
36   }
37 
38   if (l)
39     abort ();
40   return 0;
41 }
42