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