extern "C" void abort (); struct S { int *data; }; int main (void) { #define SZ 10 S *s = new S (); s->data = new int[SZ]; for (int i = 0; i < SZ; i++) s->data[i] = 0; #pragma omp target enter data map(to: s) #pragma omp target enter data map(to: s->data, s->data[:SZ]) #pragma omp target { for (int i = 0; i < SZ; i++) s->data[i] = i; } #pragma omp target exit data map(from: s->data, s->data[:SZ]) #pragma omp target exit data map(from: s) for (int i = 0; i < SZ; i++) if (s->data[i] != i) abort (); return 0; }