59 lines · plain
1// RUN: %libomptarget-compilexx-run-and-check-generic2// XFAIL: *3 4#include <cstdlib>5#include <cstdio>6#include <cassert>7 8struct S {9 int a;10 int b;11 int c;12};13 14struct T {15 S *s0;16 S *s1;17 S *s2;18};19 20int main() {21 T *v = (T *) malloc (sizeof(T));22 v->s0 = (S *) malloc (sizeof(S));23 v->s1 = (S *) malloc (sizeof(S));24 v->s2 = (S *) malloc (sizeof(S));25 v->s0->a = 10;26 v->s0->b = 10;27 v->s0->c = 10;28 v->s1->a = 20;29 v->s1->b = 20;30 v->s1->c = 20;31 v->s2->a = 30;32 v->s2->b = 30;33 v->s2->c = 30;34 35#pragma omp target map(to: v[:1]) map(tofrom: v->s1->b, v->s1->c, v->s2->b)36 {37 v->s1->b += 3;38 v->s1->c += 5;39 v->s2->b += 7;40 }41 42 printf ("%d\n", v->s0->a); // CHECK: 1043 printf ("%d\n", v->s0->b); // CHECK: 1044 printf ("%d\n", v->s0->c); // CHECK: 1045 printf ("%d\n", v->s1->a); // CHECK: 2046 printf ("%d\n", v->s1->b); // CHECK: 2347 printf ("%d\n", v->s1->c); // CHECK: 2548 printf ("%d\n", v->s2->a); // CHECK: 3049 printf ("%d\n", v->s2->b); // CHECK: 3750 printf ("%d\n", v->s2->c); // CHECK: 3051 52 free(v->s0);53 free(v->s1);54 free(v->s2);55 free(v);56 57 return 0;58}59