1 /* { dg-do run } */
2
3 #include <stdlib.h>
4
5 int
6 main (int argc, char *argv[])
7 {
8 #define N 10
9 char a[N];
10 int i;
11
12 for (i = 0; i < N; ++i)
13 a[i] = 0;
14
15 #pragma acc data copy (a)
16 {
17 #pragma acc parallel present (a)
18 {
19 int j;
20
21 for (j = 0; j < N; ++j)
22 a[j] = j;
23 }
24 }
25
26 for (i = 0; i < N; ++i)
27 {
28 if (a[i] != i)
29 abort ();
30 }
31
32 for (i = 0; i < N; ++i)
33 a[i] = 0;
34
35 #pragma acc data copy (a)
36 {
37 #pragma acc kernels present (a)
38 {
39 int j;
40
41 for (j = 0; j < N; ++j)
42 a[j] = j;
43 }
44 }
45
46 for (i = 0; i < N; ++i)
47 {
48 if (a[i] != i)
49 abort ();
50 }
51
52 for (i = 0; i < N; ++i)
53 a[i] = 0;
54
55 #pragma acc data copy (a)
56 {
57 #pragma acc data present (a)
58 {
59 #pragma acc parallel present (a)
60 {
61 int j;
62
63 for (j = 0; j < N; ++j)
64 a[j] = j;
65 }
66 }
67 }
68
69 for (i = 0; i < N; ++i)
70 {
71 if (a[i] != i)
72 abort ();
73 }
74
75 #pragma acc data copy (a)
76 {
77 #pragma acc data present (a)
78 {
79 #pragma acc kernels present (a)
80 {
81 int j;
82
83 for (j = 0; j < N; ++j)
84 a[j] = j;
85 }
86 }
87 }
88
89 for (i = 0; i < N; ++i)
90 {
91 if (a[i] != i)
92 abort ();
93 }
94
95 for (i = 0; i < N; ++i)
96 a[i] = 0;
97
98 #pragma acc enter data copyin (a)
99
100 #pragma acc data present (a)
101 {
102 #pragma acc parallel present (a)
103 {
104 int j;
105
106 for (j = 0; j < N; ++j)
107 a[j] = j;
108 }
109 }
110
111 #pragma acc exit data copyout (a)
112
113 for (i = 0; i < N; ++i)
114 {
115 if (a[i] != i)
116 abort ();
117 }
118
119 #pragma acc enter data copyin (a)
120
121 #pragma acc data present (a)
122 {
123 #pragma acc kernels present (a)
124 {
125 int j;
126
127 for (j = 0; j < N; ++j)
128 a[j] = j;
129 }
130 }
131
132 #pragma acc exit data copyout (a)
133
134 for (i = 0; i < N; ++i)
135 {
136 if (a[i] != i)
137 abort ();
138 }
139
140
141 #pragma acc enter data create (a)
142
143 #pragma acc parallel default (present)
144 {
145 for (int j = 0; j < N; ++j)
146 a[j] = j + 1;
147 }
148
149 #pragma acc update host (a)
150
151 for (i = 0; i < N; ++i)
152 {
153 if (a[i] != i + 1)
154 abort ();
155 }
156
157 #pragma acc kernels default (present)
158 {
159 for (int j = 0; j < N; ++j)
160 a[j] = j + 2;
161 }
162
163 #pragma acc exit data copyout (a)
164
165 for (i = 0; i < N; ++i)
166 {
167 if (a[i] != i + 2)
168 abort ();
169 }
170
171 return 0;
172 }