1*c2c43132SShilei Tian // RUN: %libomptarget-compilexx-and-run-generic
2*c2c43132SShilei Tian 
3*c2c43132SShilei Tian #include <cassert>
4*c2c43132SShilei Tian #include <iostream>
5*c2c43132SShilei Tian #include <stdexcept>
6*c2c43132SShilei Tian 
main(int argc,char * argv[])7*c2c43132SShilei Tian int main(int argc, char *argv[]) {
8*c2c43132SShilei Tian   int a = 0;
9*c2c43132SShilei Tian   std::cout << "outside a = " << a << " addr " << &a << std::endl;
10*c2c43132SShilei Tian #pragma omp target map(tofrom : a) depend(out : a) nowait
11*c2c43132SShilei Tian   {
12*c2c43132SShilei Tian     int sum = 0;
13*c2c43132SShilei Tian     for (int i = 0; i < 100000; i++)
14*c2c43132SShilei Tian       sum++;
15*c2c43132SShilei Tian     a = 1;
16*c2c43132SShilei Tian   }
17*c2c43132SShilei Tian 
18*c2c43132SShilei Tian #pragma omp task depend(inout : a) shared(a)
19*c2c43132SShilei Tian   {
20*c2c43132SShilei Tian     std::cout << "a = " << a << " addr " << &a << std::endl;
21*c2c43132SShilei Tian     if (a != 1)
22*c2c43132SShilei Tian       throw std::runtime_error("wrong result!");
23*c2c43132SShilei Tian     a = 2;
24*c2c43132SShilei Tian   }
25*c2c43132SShilei Tian 
26*c2c43132SShilei Tian #pragma omp task depend(inout : a) shared(a)
27*c2c43132SShilei Tian   {
28*c2c43132SShilei Tian     std::cout << "a = " << a << " addr " << &a << std::endl;
29*c2c43132SShilei Tian     if (a != 2)
30*c2c43132SShilei Tian       throw std::runtime_error("wrong result!");
31*c2c43132SShilei Tian     a = 3;
32*c2c43132SShilei Tian   }
33*c2c43132SShilei Tian 
34*c2c43132SShilei Tian #pragma omp taskwait
35*c2c43132SShilei Tian 
36*c2c43132SShilei Tian   assert(a == 3 && "wrong result!");
37*c2c43132SShilei Tian 
38*c2c43132SShilei Tian   return 0;
39*c2c43132SShilei Tian }
40