blob: efa115e8be6be8f52db59d33afe6af2713c0b165 [file]
// { dg-do run { target offload_device_nonshared_as } }
#include <string.h>
#include <assert.h>
template<auto C, auto D>
void foo (double *w)
{
memset (w, 0, sizeof (double) * 100);
#pragma omp target enter data map(to: w[:100])
for (int j = 0; j < 10; j++)
for (int i = 0; i < 10; i++)
w[j * 10 + i] = i * 2 + j * 3;
#pragma omp target update to(([C][D]) w[3:2][1:8])
#pragma omp target exit data map(from: w[:100])
for (int j = 0; j < 10; j++)
for (int i = 0; i < 10; i++)
if (j >= 3 && j < 5 && i >= 1 && i < 9)
assert (w[j * 10 + i] == i * 2 + j * 3);
else
assert (w[j * 10 + i] == 0.0f);
}
int main()
{
double *arr = new double[100];
foo<10, 10> (arr);
delete[] arr;
return 0;
}