1 // RUN: %libomptarget-compilexx-and-run-generic 2 3 #include <cassert> 4 #include <iostream> 5 6 constexpr const int N = 10; 7 8 struct T { 9 int a; 10 int *p; 11 }; 12 13 struct S { 14 int b; 15 T t; 16 }; 17 main(int argc,char * argv[])18int main(int argc, char *argv[]) { 19 S s; 20 s.t.p = new int[N]; 21 for (int i = 0; i < N; ++i) { 22 s.t.p[i] = i; 23 } 24 25 #pragma omp target enter data map(to : s, s.t.p[:N]) 26 27 #pragma omp target 28 { 29 for (int i = 0; i < N; ++i) { 30 s.t.p[i] += i; 31 } 32 } 33 34 #pragma omp target update from(s.t.p[:N]) 35 36 for (int i = 0; i < N; ++i) { 37 assert(s.t.p[i] == 2 * i); 38 s.t.p[i] += i; 39 } 40 41 #pragma omp target update to(s.t.p[:N]) 42 43 #pragma omp target 44 { 45 for (int i = 0; i < N; ++i) { 46 s.t.p[i] += i; 47 } 48 } 49 50 #pragma omp target exit data map(from : s, s.t.p[:N]) 51 52 for (int i = 0; i < N; ++i) { 53 assert(s.t.p[i] == 4 * i); 54 } 55 56 return 0; 57 } 58