1 // RUN: %libomp-compile-and-run
2 #include <stdio.h>
3 #include "omp_testsuite.h"
4 
test_omp_master_3()5 int test_omp_master_3()
6 {
7   int nthreads;
8   int executing_thread;
9   int tid_result = 0; /* counts up the number of wrong thread no. for
10                the master thread. (Must be 0) */
11   nthreads = 0;
12   executing_thread = -1;
13 
14   #pragma omp parallel
15   {
16     #pragma omp master
17     {
18       int tid = omp_get_thread_num();
19       if (tid != 0) {
20         #pragma omp critical
21         { tid_result++; }
22       }
23       #pragma omp critical
24       {
25         nthreads++;
26       }
27       executing_thread = omp_get_thread_num ();
28     } /* end of master*/
29   } /* end of parallel*/
30   return ((nthreads == 1) && (executing_thread == 0) && (tid_result == 0));
31 }
32 
main()33 int main()
34 {
35   int i;
36   int num_failed=0;
37 
38   for(i = 0; i < REPETITIONS; i++) {
39     if(!test_omp_master_3()) {
40       num_failed++;
41     }
42   }
43   return num_failed;
44 }
45