| #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; | |
| } |