| // RUN: %libomp-compile-and-run | 
 | #include <stdio.h> | 
 | #include "omp_testsuite.h" | 
 |  | 
 | int test_omp_master_3() | 
 | { | 
 |   int nthreads; | 
 |   int executing_thread; | 
 |   int tid_result = 0; /* counts up the number of wrong thread no. for | 
 |                the master thread. (Must be 0) */ | 
 |   nthreads = 0; | 
 |   executing_thread = -1; | 
 |  | 
 |   #pragma omp parallel | 
 |   { | 
 |     #pragma omp master  | 
 |     { | 
 |       int tid = omp_get_thread_num(); | 
 |       if (tid != 0) { | 
 |         #pragma omp critical | 
 |         { tid_result++; } | 
 |       } | 
 |       #pragma omp critical | 
 |       { | 
 |         nthreads++; | 
 |       } | 
 |       executing_thread = omp_get_thread_num (); | 
 |     } /* end of master*/ | 
 |   } /* end of parallel*/ | 
 |   return ((nthreads == 1) && (executing_thread == 0) && (tid_result == 0)); | 
 | } | 
 |  | 
 | int main() | 
 | { | 
 |   int i; | 
 |   int num_failed=0; | 
 |  | 
 |   for(i = 0; i < REPETITIONS; i++) { | 
 |     if(!test_omp_master_3()) { | 
 |       num_failed++; | 
 |     } | 
 |   } | 
 |   return num_failed; | 
 | } |