1// RUN: %libomp-compile-and-run
2#include "omp_testsuite.h"
3
4#define DEBUG_TEST 0
5
6int j;
7#pragma omp threadprivate(j)
8
9int 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
49int 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

source code of openmp/runtime/test/worksharing/single/omp_single_copyprivate.c