77 lines · plain
1// RUN: %libomptarget-compilexx-run-and-check-generic2// XFAIL: *3 4#include <cstdlib>5#include <cstdio>6#include <cassert>7 8struct R {9 int d;10 int e;11 int f;12};13 14struct S {15 R *r0;16 R *r1;17 R *r2;18};19 20struct T {21 S *s0;22 S *s1;23 S *s2;24};25 26int main() {27 T *v = (T *) malloc (sizeof(T));28 29 v->s0 = (S *) malloc (sizeof(S));30 v->s1 = (S *) malloc (sizeof(S));31 v->s2 = (S *) malloc (sizeof(S));32 33 v->s0->r0 = (R *) calloc (1, sizeof(R));34 v->s0->r1 = (R *) calloc (1, sizeof(R));35 v->s0->r2 = (R *) calloc (1, sizeof(R));36 37 v->s1->r0 = (R *) calloc (1, sizeof(R));38 v->s1->r1 = (R *) calloc (1, sizeof(R));39 v->s1->r2 = (R *) calloc (1, sizeof(R));40 41 v->s2->r0 = (R *) calloc (1, sizeof(R));42 v->s2->r1 = (R *) calloc (1, sizeof(R));43 v->s2->r2 = (R *) calloc (1, sizeof(R));44 45 #pragma omp target map(to: v->s1, v->s2, *v->s1, v->s1->r1, *v->s2, v->s2->r0) \46 map(tofrom: v->s1->r1->d, v->s1->r1->e, v->s1->r2->d, v->s1->r2->f, v->s2->r0->e)47 {48 v->s1->r1->d += 3;49 v->s1->r1->e += 5;50 v->s1->r2->d += 7;51 v->s1->r2->f += 9;52 v->s2->r0->e += 11;53 }54 55 printf ("%d\n", v->s1->r1->d); // CHECK: 356 printf ("%d\n", v->s1->r1->e); // CHECK: 557 printf ("%d\n", v->s1->r2->d); // CHECK: 758 printf ("%d\n", v->s1->r2->f); // CHECK: 959 printf ("%d\n", v->s2->r0->e); // CHECK: 1160 61 free(v->s0->r0);62 free(v->s0->r1);63 free(v->s0->r2);64 free(v->s1->r0);65 free(v->s1->r1);66 free(v->s1->r2);67 free(v->s2->r0);68 free(v->s2->r1);69 free(v->s2->r2);70 free(v->s0);71 free(v->s1);72 free(v->s2);73 free(v);74 75 return 0;76}77