33 lines
527 B
C
33 lines
527 B
C
![]() |
#include <cstring>
|
||
|
#include <cassert>
|
||
|
|
||
|
struct s {
|
||
|
int (&a)[10];
|
||
|
s(int (&a0)[10]) : a(a0) {}
|
||
|
};
|
||
|
|
||
|
int
|
||
|
main (int argc, char *argv[])
|
||
|
{
|
||
|
int la[10];
|
||
|
s v(la);
|
||
|
|
||
|
memset (la, 0, sizeof la);
|
||
|
|
||
|
#pragma omp target enter data map(to: v)
|
||
|
|
||
|
/* This mapping must use GOMP_MAP_ATTACH_DETACH not GOMP_MAP_ALWAYS_POINTER,
|
||
|
else the host reference v.a will be corrupted on copy-out. */
|
||
|
|
||
|
#pragma omp target map(v.a[0:10])
|
||
|
{
|
||
|
v.a[5]++;
|
||
|
}
|
||
|
|
||
|
#pragma omp target exit data map(from: v)
|
||
|
|
||
|
assert (v.a[5] == 1);
|
||
|
|
||
|
return 0;
|
||
|
}
|