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

source code of offload/test/offloading/bug50022.cpp