blob: 42a6e0ca7d82d45ab85f94a4e53a3328c7385aef [file]
// { dg-do run { target offload_device_nonshared_as } }
#include <assert.h>
#include <stdlib.h>
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;
}