1 /* { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } } */
2
3 #include <assert.h>
4 #include <openacc.h>
5 #include <stdint.h>
6
7 int
8 main ()
9 {
10 int data;
11 int *data_p_dev = (int *) acc_create (&data, sizeof data);
12 int *data_p = &data;
13 uintptr_t ptrbits;
14
15 acc_copyin (&data_p, sizeof data_p);
16
17 /* Test attach/detach directives. */
18 #pragma acc enter data attach(data_p)
19 #pragma acc serial copyout(ptrbits) /* { dg-warning "using .vector_length \\(32\\)., ignoring 1" "" { target openacc_nvidia_accel_selected } } */
20 {
21 ptrbits = (uintptr_t) data_p;
22 }
23 #pragma acc exit data detach(data_p)
24 assert ((void *) ptrbits == data_p_dev);
25
26 acc_update_self (&data_p, sizeof data_p);
27 assert (data_p == &data);
28
29 /* Test attach/detach API call. */
30 acc_attach ((void **) &data_p);
31 #pragma acc serial copyout(ptrbits) /* { dg-warning "using .vector_length \\(32\\)., ignoring 1" "" { target openacc_nvidia_accel_selected } } */
32 {
33 ptrbits = (uintptr_t) data_p;
34 }
35 acc_detach ((void **) &data_p);
36
37 assert ((void *) ptrbits == data_p_dev);
38 acc_update_self (&data_p, sizeof data_p);
39 assert (data_p == &data);
40
41 acc_delete (&data_p, sizeof data_p);
42 acc_delete (&data, sizeof data);
43
44 return 0;
45 }
46