1 // RUN: %libomp-compile-and-run
2 #include <stdio.h>
3 #include <math.h>
4 #include "omp_testsuite.h"
5 
6 /* Utility function do spend some time in a loop */
test_omp_task_private()7 int test_omp_task_private()
8 {
9   int i;
10   int known_sum;
11   int sum = 0;
12   int result = 0; /* counts the wrong sums from tasks */
13 
14   known_sum = (LOOPCOUNT * (LOOPCOUNT + 1)) / 2;
15 
16   #pragma omp parallel
17   {
18     #pragma omp single
19     {
20       for (i = 0; i < NUM_TASKS; i++) {
21         #pragma omp task private(sum) shared(result, known_sum)
22         {
23           int j;
24           //if sum is private, initialize to 0
25           sum = 0;
26           for (j = 0; j <= LOOPCOUNT; j++) {
27             #pragma omp flush
28             sum += j;
29           }
30           /* check if calculated sum was right */
31           if (sum != known_sum) {
32             #pragma omp critical
33             result++;
34           }
35         } /* end of omp task */
36       } /* end of for */
37     } /* end of single */
38   } /* end of parallel*/
39   return (result == 0);
40 }
41 
main()42 int main()
43 {
44   int i;
45   int num_failed=0;
46 
47   for(i = 0; i < REPETITIONS; i++) {
48     if(!test_omp_task_private()) {
49       num_failed++;
50     }
51   }
52   return num_failed;
53 }
54