xref: /llvm-project/openmp/runtime/test/tasking/omp_task_shared.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_shared()7*614c7ef8SJonathan Peyton int test_omp_task_imp_shared()
8*614c7ef8SJonathan Peyton {
9*614c7ef8SJonathan Peyton   int i;
10*614c7ef8SJonathan Peyton   int k = 0;
11*614c7ef8SJonathan Peyton   int result = 0;
12*614c7ef8SJonathan Peyton   i=0;
13*614c7ef8SJonathan Peyton 
14*614c7ef8SJonathan Peyton   #pragma omp parallel
15*614c7ef8SJonathan Peyton   {
16*614c7ef8SJonathan Peyton     #pragma omp single
17*614c7ef8SJonathan Peyton     for (k = 0; k < NUM_TASKS; k++) {
18*614c7ef8SJonathan Peyton       #pragma omp task shared(i)
19*614c7ef8SJonathan Peyton       {
20*614c7ef8SJonathan Peyton         #pragma omp atomic
21*614c7ef8SJonathan Peyton         i++;
22*614c7ef8SJonathan Peyton         //this should be shared implicitly
23*614c7ef8SJonathan Peyton       }
24*614c7ef8SJonathan Peyton     }
25*614c7ef8SJonathan Peyton   }
26*614c7ef8SJonathan Peyton   result = i;
27*614c7ef8SJonathan Peyton   return ((result == NUM_TASKS));
28*614c7ef8SJonathan Peyton }
29*614c7ef8SJonathan Peyton 
main()30*614c7ef8SJonathan Peyton int main()
31*614c7ef8SJonathan Peyton {
32*614c7ef8SJonathan Peyton   int i;
33*614c7ef8SJonathan Peyton   int num_failed=0;
34*614c7ef8SJonathan Peyton 
35*614c7ef8SJonathan Peyton   for(i = 0; i < REPETITIONS; i++) {
36*614c7ef8SJonathan Peyton     if(!test_omp_task_imp_shared()) {
37*614c7ef8SJonathan Peyton       num_failed++;
38*614c7ef8SJonathan Peyton     }
39*614c7ef8SJonathan Peyton   }
40*614c7ef8SJonathan Peyton   return num_failed;
41*614c7ef8SJonathan Peyton }
42