/* { dg-do run } */ #include #include int main (void) { int **a_orig,i,j,n; int **&a = a_orig; j = 3; n = 12; a = (int **) calloc (32, sizeof (int *)); for (int x = 0; x < 32; x++) a[x] = (int *) calloc (32, sizeof (int)); for (int i = 2; i < 32; i++) { #pragma omp target enter data map(a, a[2:30]) #pragma omp target enter data map(a[i][j:n]) #pragma omp target map(alloc: a) { for (int x = j; x < j + n; x++) a[i][x]++; } #pragma omp target exit data map(a[i][j:n]) #pragma omp target data map(a, a[i][j:n]) { #pragma omp target map(alloc: a) { for (int x = j; x < j + n; x++) a[i][x]++; } } #pragma omp target exit data map(a, a[2:30]) #pragma omp target data map(a, a[2:30]) { #pragma omp target map(a[i][j:n]) { for (int x = j; x < j + n; x++) a[i][x]++; } } } for (int i = 0; i < 32; i++) for (int j = 0; j < 32; j++) if (i >= 2 && j >= 3 && j < 15) assert (a[i][j] == 3); else assert (a[i][j] == 0); return 0; }