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 Tianint 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