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 | |
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 | |
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 | |