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