1 // RUN: %libomp-compile-and-run
2 #include "omp_testsuite.h"
3
4 #define DEBUG_TEST 0
5
6 int j;
7 #pragma omp threadprivate(j)
8
test_omp_single_copyprivate()9 int test_omp_single_copyprivate()
10 {
11 int result;
12 int nr_iterations;
13
14 result = 0;
15 nr_iterations = 0;
16 #pragma omp parallel num_threads(4)
17 {
18 int i;
19 for (i = 0; i < LOOPCOUNT; i++)
20 {
21 #if DEBUG_TEST
22 int thread;
23 thread = omp_get_thread_num ();
24 #endif
25 #pragma omp single copyprivate(j)
26 {
27 nr_iterations++;
28 j = i;
29 #if DEBUG_TEST
30 printf ("thread %d assigns, j = %d, i = %d\n", thread, j, i);
31 #endif
32 }
33 #if DEBUG_TEST
34 #pragma omp barrier
35 #endif
36 #pragma omp critical
37 {
38 #if DEBUG_TEST
39 printf ("thread = %d, j = %d, i = %d\n", thread, j, i);
40 #endif
41 result = result + j - i;
42 }
43 #pragma omp barrier
44 } /* end of for */
45 } /* end of parallel */
46 return ((result == 0) && (nr_iterations == LOOPCOUNT));
47 }
48
main()49 int main()
50 {
51 int i;
52 int num_failed=0;
53
54 for(i = 0; i < REPETITIONS; i++) {
55 if(!test_omp_single_copyprivate()) {
56 num_failed++;
57 }
58 }
59 return num_failed;
60 }
61