1 /* { dg-do run { target { ! openacc_host_selected } } } */
16 test (unsigned variant
)
19 struct dc v
= { .a
= 3 };
21 v
.b
= (int *) malloc (sizeof (int) * n
);
22 v
.c
= (int *) malloc (sizeof (int) * n
);
23 v
.d
= (int *) malloc (sizeof (int) * n
);
27 #pragma acc enter data copyin(v)
31 void *v_d
= acc_malloc (sizeof v
);
32 acc_map_data (&v
, v_d
, sizeof v
);
33 acc_memcpy_to_device (v_d
, &v
, sizeof v
);
36 for (k
= 0; k
< 16; k
++)
38 #pragma acc enter data copyin(v.a, v.b[:n], v.c[:n], v.d[:n])
40 #pragma acc parallel loop
41 for (i
= 0; i
< n
; i
++)
44 #pragma acc exit data copyout(v.b[:n])
45 #pragma acc exit data copyout(v.c[:n])
46 #pragma acc exit data copyout(v.d[:n])
47 #pragma acc exit data copyout(v.a)
49 for (i
= 0; i
< n
; i
++)
50 assert (v
.b
[i
] == v
.a
+ i
);
52 assert (acc_is_present (&v
, sizeof (v
)));
53 assert (!acc_is_present (v
.b
, sizeof (int) * n
));
54 assert (!acc_is_present (v
.c
, sizeof (int) * n
));
55 assert (!acc_is_present (v
.d
, sizeof (int) * n
));
60 #pragma acc exit data copyout(v)
64 void *v_d
= acc_deviceptr (&v
);
69 assert (!acc_is_present (&v
, sizeof (v
)));
75 for (unsigned variant
= 0; variant
< 2; ++variant
)