| // { dg-do run } |
| |
| #include <cstring> |
| #include <cassert> |
| |
| 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; |
| } |
| |