1 /* Test 'no_create' clause on 'data' construct and nested compute construct,
2 with data not present on the device. */
3
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <openacc.h>
7
8 #define N 128
9
10 int
11 main (int argc, char *argv[])
12 {
13 int var;
14 int *arr = (int *) malloc (N * sizeof (*arr));
15 int *devptr[2];
16
17 #pragma acc data no_create(var, arr[0:N])
18 {
19 devptr[0] = (int *) acc_deviceptr (&var);
20 devptr[1] = (int *) acc_deviceptr (&arr[2]);
21
22 #if ACC_MEM_SHARED
23 if (devptr[0] == NULL)
24 __builtin_abort ();
25 if (devptr[1] == NULL)
26 __builtin_abort ();
27 #else
28 if (devptr[0] != NULL)
29 __builtin_abort ();
30 if (devptr[1] != NULL)
31 __builtin_abort ();
32 #endif
33
34 #pragma acc parallel copyout(devptr) // TODO implicit 'copy(var)' -- huh?!
35 {
36 devptr[0] = &var;
37 devptr[1] = &arr[2];
38 }
39
40 if (devptr[0] != &var)
41 __builtin_abort (); // { dg-xfail-run-if "TODO" { *-*-* } { "-DACC_MEM_SHARED=0" } }
42 if (devptr[1] != &arr[2])
43 __builtin_abort ();
44 }
45
46 free (arr);
47
48 return 0;
49 }