1 // RUN: %libomptarget-compilexx-run-and-check-generic
13 template <typename T
> struct Foo
{
14 Foo(T
&V
) : VRef(V
) {}
28 // CHECK: Host 123456.
29 printf("Host %d.\n", Bar
.VRef
.Data
);
30 #pragma omp target map(Bar.VRef) map(from : D1, D2)
32 // CHECK: Device 123456.
34 printf("Device %d.\n", D1
);
36 // CHECK: Device 654321.
38 printf("Device %d.\n", D2
);
40 printf("Device %d.\n", D1
);
41 printf("Device %d.\n", D2
);
42 // CHECK: Host 654321 654321.
43 printf("Host %d %d.\n", Bar
.VRef
.Data
, V
.Data
);
45 // CHECK: Host 123456.
46 printf("Host %d.\n", Bar
.VRef
.Data
);
47 #pragma omp target map(Bar) map(Bar.VRef) map(from : D1, D2)
49 // CHECK: Device 123456.
51 printf("Device %d.\n", D1
);
53 // CHECK: Device 654321.
55 printf("Device %d.\n", D2
);
57 printf("Device %d.\n", D1
);
58 printf("Device %d.\n", D2
);
59 // CHECK: Host 654321 654321.
60 printf("Host %d %d.\n", Bar
.VRef
.Data
, V
.Data
);
61 // CHECK: Host 123456.
62 printf("Host %d.\n", *Baz
.VRef
.Data
);
63 #pragma omp target map(*Baz.VRef.Data) map(from : D1, D2)
65 // CHECK: Device 123456.
67 printf("Device %d.\n", D1
);
69 // CHECK: Device 654321.
71 printf("Device %d.\n", D2
);
73 printf("Device %d.\n", D1
);
74 printf("Device %d.\n", D2
);
75 // CHECK: Host 654321 654321 654321.
76 printf("Host %d %d %d.\n", *Baz
.VRef
.Data
, *V1
.Data
, Data
);