// { dg-do run } #include #include struct sa { int *ptr; int *ptr2; }; struct sb { int arr[10]; }; struct scp { sa *&a; sb *&b; scp (sa *&my_a, sb *&my_b) : a(my_a), b(my_b) {} }; int main () { sa *my_a = new sa; sb *my_b = new sb; my_a->ptr = new int[10]; my_a->ptr2 = new int[10]; scp *my_c = new scp(my_a, my_b); memset (my_c->a->ptr, 0, sizeof (int) * 10); memset (my_c->a->ptr2, 0, sizeof (int) * 10); #pragma omp target map (my_c->a, \ my_c->a->ptr, my_c->a->ptr[:10], \ my_c->a->ptr2, my_c->a->ptr2[:10]) { for (int i = 0; i < 10; i++) { my_c->a->ptr[i] = i; my_c->a->ptr2[i] = i * 2; } } for (int i = 0; i < 10; i++) { assert (my_c->a->ptr[i] == i); assert (my_c->a->ptr2[i] == i * 2); } delete[] my_a->ptr; delete[] my_a->ptr2; delete my_a; delete my_b; delete my_c; return 0; }