xref: /llvm-project/openmp/runtime/test/tasking/taskdep_if0.c (revision ee1c04a926904b34525e4577742d8c10a23db814)
1*ee1c04a9SPeyton, Jonathan L // RUN: %libomp-compile-and-run
2*ee1c04a9SPeyton, Jonathan L 
3*ee1c04a9SPeyton, Jonathan L #include <stdio.h>
4*ee1c04a9SPeyton, Jonathan L #include <stdlib.h>
5*ee1c04a9SPeyton, Jonathan L #include <omp.h>
6*ee1c04a9SPeyton, Jonathan L #include "omp_my_sleep.h"
7*ee1c04a9SPeyton, Jonathan L 
8*ee1c04a9SPeyton, Jonathan L int a = 0;
9*ee1c04a9SPeyton, Jonathan L 
task1()10*ee1c04a9SPeyton, Jonathan L void task1() {
11*ee1c04a9SPeyton, Jonathan L   my_sleep(0.5);
12*ee1c04a9SPeyton, Jonathan L   a = 10;
13*ee1c04a9SPeyton, Jonathan L }
14*ee1c04a9SPeyton, Jonathan L 
task2()15*ee1c04a9SPeyton, Jonathan L void task2() {
16*ee1c04a9SPeyton, Jonathan L   a++;
17*ee1c04a9SPeyton, Jonathan L }
18*ee1c04a9SPeyton, Jonathan L 
main(int argc,char ** argv)19*ee1c04a9SPeyton, Jonathan L int main(int argc, char** argv)
20*ee1c04a9SPeyton, Jonathan L {
21*ee1c04a9SPeyton, Jonathan L   #pragma omp parallel shared(argc) num_threads(2)
22*ee1c04a9SPeyton, Jonathan L   {
23*ee1c04a9SPeyton, Jonathan L     #pragma omp single
24*ee1c04a9SPeyton, Jonathan L     {
25*ee1c04a9SPeyton, Jonathan L       #pragma omp task depend(out: a)
26*ee1c04a9SPeyton, Jonathan L       task1();
27*ee1c04a9SPeyton, Jonathan L 
28*ee1c04a9SPeyton, Jonathan L       #pragma omp task if(0) depend(inout: a)
29*ee1c04a9SPeyton, Jonathan L       task2();
30*ee1c04a9SPeyton, Jonathan L     }
31*ee1c04a9SPeyton, Jonathan L   }
32*ee1c04a9SPeyton, Jonathan L   if (a != 11) {
33*ee1c04a9SPeyton, Jonathan L     fprintf(stderr, "fail: expected 11, but a is %d\n", a);
34*ee1c04a9SPeyton, Jonathan L     exit(1);
35*ee1c04a9SPeyton, Jonathan L   } else {
36*ee1c04a9SPeyton, Jonathan L     printf("pass\n");
37*ee1c04a9SPeyton, Jonathan L   }
38*ee1c04a9SPeyton, Jonathan L   return 0;
39*ee1c04a9SPeyton, Jonathan L }
40