63 lines
914 B
C
63 lines
914 B
C
![]() |
// { 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;
|
||
|
}
|
||
|
|