1 #include <stdlib.h>
2 #include <openacc.h>
3
4 float *b;
5 #pragma acc declare deviceptr (b)
6
7 #pragma acc routine
8 float *
9 subr2 (void)
10 {
11 return b;
12 }
13
14 float
15 subr1 (float a)
16 {
17 float b;
18 #pragma acc declare present_or_copy (b)
19 float c;
20 #pragma acc declare present_or_copyin (c)
21 float d;
22 #pragma acc declare present_or_create (d)
23 float e;
24 #pragma acc declare present_or_copyout (e)
25
26 #pragma acc parallel copy (a)
27 {
28 b = a;
29 c = b;
30 d = c;
31 e = d;
32 a = e;
33 }
34
35 return a;
36 }
37
38 int
39 main (int argc, char **argv)
40 {
41 float a;
42 float *c;
43
44 a = 2.0;
45
46 a = subr1 (a);
47
48 if (a != 2.0)
49 abort ();
50
51 b = (float *) acc_malloc (sizeof (float));
52
53 c = subr2 ();
54
55 if (b != c)
56 abort ();
57
58 return 0;
59 }