// { dg-do run { target offload_device_nonshared_as } } #include #include typedef struct { int *aptr; } C; int main() { C cvar; cvar.aptr = calloc (100, sizeof (float)); #pragma omp target enter data map(to: cvar.aptr, cvar.aptr[:100]) #pragma omp target { for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) cvar.aptr[i * 10 + j] = i + j; } #pragma omp target update from(([10][10]) cvar.aptr[4:3][4:3]) for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) if (i >= 4 && i < 7 && j >= 4 && j < 7) assert (cvar.aptr[i * 10 + j] == i + j); else assert (cvar.aptr[i * 10 + j] == 0); #pragma omp target exit data map(delete: cvar.aptr, cvar.aptr[:100]) free (cvar.aptr); return 0; }