xref: /llvm-project/openmp/runtime/test/worksharing/single/omp_single_private.c (revision 373107699709f6fb06992bf6b76274091570aaf2)
1 // RUN: %libomp-compile-and-run
2 #include <stdio.h>
3 #include "omp_testsuite.h"
4 
5 int myit = 0;
6 #pragma omp threadprivate(myit)
7 int myresult = 0;
8 #pragma omp threadprivate(myresult)
9 
test_omp_single_private()10 int test_omp_single_private()
11 {
12   int nr_threads_in_single;
13   int result;
14   int nr_iterations;
15   int i;
16 
17   myit = 0;
18   nr_threads_in_single = 0;
19   nr_iterations = 0;
20   result = 0;
21 
22   #pragma omp parallel private(i)
23   {
24     myresult = 0;
25     myit = 0;
26     for (i = 0; i < LOOPCOUNT; i++) {
27       #pragma omp single private(nr_threads_in_single) nowait
28       {
29         nr_threads_in_single = 0;
30         #pragma omp flush
31         nr_threads_in_single++;
32         #pragma omp flush
33         myit++;
34         myresult = myresult + nr_threads_in_single;
35       }
36     }
37     #pragma omp critical
38     {
39       result += nr_threads_in_single;
40       nr_iterations += myit;
41     }
42   }
43   return ((result == 0) && (nr_iterations == LOOPCOUNT));
44 } /* end of check_single private */
45 
main()46 int main()
47 {
48   int i;
49   int num_failed=0;
50 
51   for(i = 0; i < REPETITIONS; i++) {
52     if(!test_omp_single_private()) {
53       num_failed++;
54     }
55   }
56   return num_failed;
57 }
58