xref: /llvm-project/openmp/runtime/test/worksharing/single/omp_single.c (revision 373107699709f6fb06992bf6b76274091570aaf2)
1 // RUN: %libomp-compile-and-run
2 #include <stdio.h>
3 #include "omp_testsuite.h"
4 
test_omp_single()5 int test_omp_single()
6 {
7   int nr_threads_in_single;
8   int result;
9   int nr_iterations;
10   int i;
11 
12   nr_threads_in_single = 0;
13   result = 0;
14   nr_iterations = 0;
15 
16   #pragma omp parallel private(i)
17   {
18     for (i = 0; i < LOOPCOUNT; i++) {
19       #pragma omp single
20       {
21         #pragma omp flush
22         nr_threads_in_single++;
23         #pragma omp flush
24         nr_iterations++;
25         nr_threads_in_single--;
26         result = result + nr_threads_in_single;
27       }
28     }
29   }
30   return ((result == 0) && (nr_iterations == LOOPCOUNT));
31 } /* end of check_single*/
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_single()) {
40       num_failed++;
41     }
42   }
43   return num_failed;
44 }
45