xref: /llvm-project/openmp/runtime/test/master/omp_master.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()5*614c7ef8SJonathan Peyton int test_omp_master()
6*614c7ef8SJonathan Peyton {
7*614c7ef8SJonathan Peyton   int nthreads;
8*614c7ef8SJonathan Peyton   int executing_thread;
9*614c7ef8SJonathan Peyton 
10*614c7ef8SJonathan Peyton   nthreads = 0;
11*614c7ef8SJonathan Peyton   executing_thread = -1;
12*614c7ef8SJonathan Peyton 
13*614c7ef8SJonathan Peyton   #pragma omp parallel
14*614c7ef8SJonathan Peyton   {
15*614c7ef8SJonathan Peyton     #pragma omp master
16*614c7ef8SJonathan Peyton     {
17*614c7ef8SJonathan Peyton       #pragma omp critical
18*614c7ef8SJonathan Peyton       {
19*614c7ef8SJonathan Peyton         nthreads++;
20*614c7ef8SJonathan Peyton       }
21*614c7ef8SJonathan Peyton       executing_thread = omp_get_thread_num();
22*614c7ef8SJonathan Peyton     } /* end of master*/
23*614c7ef8SJonathan Peyton   } /* end of parallel*/
24*614c7ef8SJonathan Peyton   return ((nthreads == 1) && (executing_thread == 0));
25*614c7ef8SJonathan Peyton }
26*614c7ef8SJonathan Peyton 
main()27*614c7ef8SJonathan Peyton int main()
28*614c7ef8SJonathan Peyton {
29*614c7ef8SJonathan Peyton   int i;
30*614c7ef8SJonathan Peyton   int num_failed=0;
31*614c7ef8SJonathan Peyton 
32*614c7ef8SJonathan Peyton   for(i = 0; i < REPETITIONS; i++) {
33*614c7ef8SJonathan Peyton     if(!test_omp_master()) {
34*614c7ef8SJonathan Peyton       num_failed++;
35*614c7ef8SJonathan Peyton     }
36*614c7ef8SJonathan Peyton   }
37*614c7ef8SJonathan Peyton   return num_failed;
38*614c7ef8SJonathan Peyton }
39