xref: /llvm-project/openmp/runtime/test/tasking/omp_task_imp_firstprivate.c (revision 614c7ef81c7de51f61239e609edf9c6716b23ebc)
1*614c7ef8SJonathan Peyton // RUN: %libomp-compile-and-run
2*614c7ef8SJonathan Peyton #include <stdio.h>
3*614c7ef8SJonathan Peyton #include <math.h>
4*614c7ef8SJonathan Peyton #include "omp_testsuite.h"
5*614c7ef8SJonathan Peyton 
6*614c7ef8SJonathan Peyton /* Utility function do spend some time in a loop */
test_omp_task_imp_firstprivate()7*614c7ef8SJonathan Peyton int test_omp_task_imp_firstprivate()
8*614c7ef8SJonathan Peyton {
9*614c7ef8SJonathan Peyton   int i=5;
10*614c7ef8SJonathan Peyton   int k = 0;
11*614c7ef8SJonathan Peyton   int result = 0;
12*614c7ef8SJonathan Peyton   int task_result = 1;
13*614c7ef8SJonathan Peyton   #pragma omp parallel firstprivate(i)
14*614c7ef8SJonathan Peyton   {
15*614c7ef8SJonathan Peyton     #pragma omp single
16*614c7ef8SJonathan Peyton     {
17*614c7ef8SJonathan Peyton       for (k = 0; k < NUM_TASKS; k++) {
18*614c7ef8SJonathan Peyton         #pragma omp task shared(result , task_result)
19*614c7ef8SJonathan Peyton         {
20*614c7ef8SJonathan Peyton           int j;
21*614c7ef8SJonathan Peyton           //check if i is private
22*614c7ef8SJonathan Peyton           if(i != 5)
23*614c7ef8SJonathan Peyton             task_result = 0;
24*614c7ef8SJonathan Peyton           for(j = 0; j < NUM_TASKS; j++)
25*614c7ef8SJonathan Peyton             i++;
26*614c7ef8SJonathan Peyton           //this should be firstprivate implicitly
27*614c7ef8SJonathan Peyton         }
28*614c7ef8SJonathan Peyton       }
29*614c7ef8SJonathan Peyton       #pragma omp taskwait
30*614c7ef8SJonathan Peyton       result = (task_result && i==5);
31*614c7ef8SJonathan Peyton     }
32*614c7ef8SJonathan Peyton   }
33*614c7ef8SJonathan Peyton   return result;
34*614c7ef8SJonathan Peyton }
35*614c7ef8SJonathan Peyton 
main()36*614c7ef8SJonathan Peyton int main()
37*614c7ef8SJonathan Peyton {
38*614c7ef8SJonathan Peyton   int i;
39*614c7ef8SJonathan Peyton   int num_failed=0;
40*614c7ef8SJonathan Peyton 
41*614c7ef8SJonathan Peyton   for(i = 0; i < REPETITIONS; i++) {
42*614c7ef8SJonathan Peyton     if(!test_omp_task_imp_firstprivate()) {
43*614c7ef8SJonathan Peyton       num_failed++;
44*614c7ef8SJonathan Peyton     }
45*614c7ef8SJonathan Peyton   }
46*614c7ef8SJonathan Peyton   return num_failed;
47*614c7ef8SJonathan Peyton }
48