| extern "C" void abort (); |
| |
| struct S |
| { |
| int *data; |
| }; |
| |
| int |
| main (void) |
| { |
| #define SZ 10 |
| S *s = new S (); |
| s->data = new int[SZ]; |
| |
| for (int i = 0; i < SZ; i++) |
| s->data[i] = 0; |
| |
| #pragma omp target enter data map(to: s) |
| #pragma omp target enter data map(to: s->data, s->data[:SZ]) |
| #pragma omp target |
| { |
| for (int i = 0; i < SZ; i++) |
| s->data[i] = i; |
| } |
| #pragma omp target exit data map(from: s->data, s->data[:SZ]) |
| #pragma omp target exit data map(from: s) |
| |
| for (int i = 0; i < SZ; i++) |
| if (s->data[i] != i) |
| abort (); |
| |
| return 0; |
| } |
| |