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