1 /* Test various aspects of clauses specifying incompatible levels of
2 parallelism with the OpenACC 'routine' directive. */
3
4 extern void g_1 (void);
5 #pragma acc routine (g_1) gang gang /* { dg-error "too many 'gang' clauses" } */
6
7 #pragma acc routine worker worker /* { dg-error "too many 'worker' clauses" } */
w_1(void)8 void w_1 (void)
9 {
10 }
11
12 #pragma acc routine vector vector /* { dg-error "too many 'vector' clauses" } */
v_1(void)13 void v_1 (void)
14 {
15 }
16
17 #pragma acc routine seq seq /* { dg-error "too many 'seq' clauses" } */
18 extern void s_1 (void);
19
20
21 #pragma acc routine gang gang gang /* { dg-error "too many 'gang' clauses" } */
g_2(void)22 void g_2 (void)
23 {
24 }
25
26 #pragma acc routine worker worker worker /* { dg-error "too many 'worker' clauses" } */
27 extern void w_2 (void);
28
29 extern void v_2 (void);
30 #pragma acc routine (v_2) vector vector vector /* { dg-error "too many 'vector' clauses" } */
31
32 #pragma acc routine seq seq seq /* { dg-error "too many 'seq' clauses" } */
s_2(void)33 void s_2 (void)
34 {
35 }
36
37
38 #pragma acc routine \
39 gang \
40 worker /* { dg-error ".worker. specifies a conflicting level of parallelism" } */
g_3(void)41 void g_3 (void)
42 {
43 }
44 #pragma acc routine (g_3) \
45 gang \
46 seq /* { dg-error ".seq. specifies a conflicting level of parallelism" } */
47 #pragma acc routine (g_3) \
48 gang \
49 vector /* { dg-error ".vector. specifies a conflicting level of parallelism" } */
50
51 extern void w_3 (void);
52 #pragma acc routine (w_3) \
53 worker \
54 vector /* { dg-error ".vector. specifies a conflicting level of parallelism" } */
55 #pragma acc routine (w_3) \
56 worker \
57 gang /* { dg-error ".gang. specifies a conflicting level of parallelism" } */
58 #pragma acc routine (w_3) \
59 worker \
60 seq /* { dg-error ".seq. specifies a conflicting level of parallelism" } */
61
62 #pragma acc routine \
63 vector \
64 seq /* { dg-error ".seq. specifies a conflicting level of parallelism" } */
v_3(void)65 void v_3 (void)
66 {
67 }
68 #pragma acc routine (v_3) \
69 vector \
70 worker /* { dg-error ".worker. specifies a conflicting level of parallelism" } */
71 #pragma acc routine (v_3) \
72 vector \
73 gang /* { dg-error ".gang. specifies a conflicting level of parallelism" } */
74
75 extern void s_3 (void);
76 #pragma acc routine (s_3) \
77 seq \
78 gang /* { dg-error ".gang. specifies a conflicting level of parallelism" } */
79 #pragma acc routine (s_3) \
80 seq \
81 vector /* { dg-error ".vector. specifies a conflicting level of parallelism" } */
82 #pragma acc routine (s_3) \
83 seq \
84 worker /* { dg-error ".worker. specifies a conflicting level of parallelism" } */
85
86
87 #pragma acc routine \
88 gang gang gang /* { dg-error "too many 'gang' clauses" } */ \
89 worker /* { dg-error ".worker. specifies a conflicting level of parallelism" } */ \
90 vector /* { dg-error ".vector. specifies a conflicting level of parallelism" } */ \
91 seq /* { dg-error ".seq. specifies a conflicting level of parallelism" } */
92 extern void g_4 (void);
93 #pragma acc routine (g_4) \
94 gang gang gang /* { dg-error "too many 'gang' clauses" } */ \
95 vector /* { dg-error ".vector. specifies a conflicting level of parallelism" } */ \
96 worker /* { dg-error ".worker. specifies a conflicting level of parallelism" } */ \
97 seq /* { dg-error ".seq. specifies a conflicting level of parallelism" } */
98 #pragma acc routine (g_4) \
99 gang gang gang /* { dg-error "too many 'gang' clauses" } */ \
100 seq /* { dg-error ".seq. specifies a conflicting level of parallelism" } */ \
101 vector /* { dg-error ".vector. specifies a conflicting level of parallelism" } */ \
102 worker /* { dg-error ".worker. specifies a conflicting level of parallelism" } */
103
104 extern void w_4 (void);
105 #pragma acc routine (w_4) \
106 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
107 seq /* { dg-error ".seq. specifies a conflicting level of parallelism" } */ \
108 vector /* { dg-error ".vector. specifies a conflicting level of parallelism" } */ \
109 gang /* { dg-error ".gang. specifies a conflicting level of parallelism" } */
110 #pragma acc routine (w_4) \
111 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
112 vector /* { dg-error ".vector. specifies a conflicting level of parallelism" } */ \
113 seq /* { dg-error ".seq. specifies a conflicting level of parallelism" } */ \
114 gang /* { dg-error ".gang. specifies a conflicting level of parallelism" } */
115 #pragma acc routine (w_4) \
116 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
117 seq /* { dg-error ".seq. specifies a conflicting level of parallelism" } */ \
118 gang /* { dg-error ".gang. specifies a conflicting level of parallelism" } */ \
119 vector /* { dg-error ".vector. specifies a conflicting level of parallelism" } */
120
121 #pragma acc routine \
122 vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
123 worker /* { dg-error ".worker. specifies a conflicting level of parallelism" } */ \
124 seq /* { dg-error ".seq. specifies a conflicting level of parallelism" } */ \
125 gang /* { dg-error ".gang. specifies a conflicting level of parallelism" } */
v_4(void)126 void v_4 (void)
127 {
128 }
129 #pragma acc routine (v_4) \
130 vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
131 seq /* { dg-error ".seq. specifies a conflicting level of parallelism" } */ \
132 worker /* { dg-error ".worker. specifies a conflicting level of parallelism" } */ \
133 gang /* { dg-error ".gang. specifies a conflicting level of parallelism" } */
134 #pragma acc routine (v_4) \
135 vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
136 gang /* { dg-error ".gang. specifies a conflicting level of parallelism" } */ \
137 seq /* { dg-error ".seq. specifies a conflicting level of parallelism" } */ \
138 worker /* { dg-error ".worker. specifies a conflicting level of parallelism" } */
139
140 #pragma acc routine \
141 seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
142 vector /* { dg-error ".vector. specifies a conflicting level of parallelism" } */ \
143 worker /* { dg-error ".worker. specifies a conflicting level of parallelism" } */ \
144 gang /* { dg-error ".gang. specifies a conflicting level of parallelism" } */
s_4(void)145 void s_4 (void)
146 {
147 }
148 #pragma acc routine (s_4) \
149 seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
150 vector /* { dg-error ".vector. specifies a conflicting level of parallelism" } */ \
151 gang /* { dg-error ".gang. specifies a conflicting level of parallelism" } */ \
152 worker /* { dg-error ".worker. specifies a conflicting level of parallelism" } */
153 #pragma acc routine (s_4) \
154 seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
155 worker /* { dg-error ".worker. specifies a conflicting level of parallelism" } */ \
156 vector /* { dg-error ".vector. specifies a conflicting level of parallelism" } */ \
157 gang /* { dg-error ".gang. specifies a conflicting level of parallelism" } */
158
159
160 #pragma acc routine \
161 gang gang gang /* { dg-error "too many 'gang' clauses" } */ \
162 worker worker /* { dg-error "too many 'worker' clauses" } */ \
163 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
164 vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
165 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
166 seq seq seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
167 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
g_5(void)168 void g_5 (void)
169 {
170 }
171 #pragma acc routine (g_5) \
172 gang gang gang /* { dg-error "too many 'gang' clauses" } */ \
173 vector vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
174 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
175 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
176 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
177 seq seq seq seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
178 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
179 #pragma acc routine (g_5) \
180 gang gang gang /* { dg-error "too many 'gang' clauses" } */ \
181 seq seq seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
182 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
183 vector vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
184 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
185 worker worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
186 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
187
188 #pragma acc routine \
189 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
190 seq seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
191 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
192 vector vector vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
193 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
194 gang gang /* { dg-error "too many 'gang' clauses" } */ \
195 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
196 extern void w_5 (void);
197 #pragma acc routine (w_5) \
198 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
199 vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
200 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
201 seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
202 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
203 gang gang /* { dg-error "too many 'gang' clauses" } */ \
204 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
205 #pragma acc routine (w_5) \
206 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
207 seq seq /* { dg-error "too many 'seq' clauses" } */ \
208 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
209 gang gang /* { dg-error "too many 'gang' clauses" } */ \
210 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
211 vector vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
212 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
213
214 #pragma acc routine \
215 vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
216 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
217 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
218 seq seq seq seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
219 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
220 gang gang /* { dg-error "too many 'gang' clauses" } */ \
221 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
222 extern void v_5 (void);
223 #pragma acc routine (v_5) \
224 vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
225 seq seq seq seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
226 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
227 worker worker /* { dg-error "too many 'worker' clauses" } */ \
228 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
229 gang gang /* { dg-error "too many 'gang' clauses" } */ \
230 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
231 #pragma acc routine (v_5) \
232 vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
233 gang gang /* { dg-error "too many 'gang' clauses" } */ \
234 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
235 seq seq seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
236 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
237 worker worker /* { dg-error "too many 'worker' clauses" } */ \
238 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
239
240 extern void s_5 (void);
241 #pragma acc routine (s_5) \
242 seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
243 vector vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
244 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
245 worker worker worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
246 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
247 gang gang /* { dg-error "too many 'gang' clauses" } */ \
248 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
249 #pragma acc routine (s_5) \
250 seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
251 vector vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
252 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
253 gang gang /* { dg-error "too many 'gang' clauses" } */ \
254 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
255 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
256 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
257 #pragma acc routine (s_5) \
258 seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
259 worker worker /* { dg-error "too many 'worker' clauses" } */ \
260 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
261 vector vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
262 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
263 gang gang /* { dg-error "too many 'gang' clauses" } */ \
264 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
265
266
267 /* Like the *_5 tests, but with the order of clauses changed in the second and
268 following routine directives for the specific *_5 function. */
269
270 #pragma acc routine \
271 gang gang gang /* { dg-error "too many 'gang' clauses" } */ \
272 worker worker /* { dg-error "too many 'worker' clauses" } */ \
273 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
274 vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
275 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
276 seq seq seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
277 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
g_6(void)278 void g_6 (void)
279 {
280 }
281 #pragma acc routine (g_6) \
282 vector vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
283 /* { dg-error "incompatible .vector. clause when applying .#pragma acc routine. to .\[void \]*g_6\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" "" { target *-*-* } .-1 } */ \
284 gang gang gang /* { dg-error "too many 'gang' clauses" } */ \
285 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
286 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
287 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
288 seq seq seq seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
289 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
290 #pragma acc routine (g_6) \
291 seq seq seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
292 /* { dg-error "incompatible .seq. clause when applying .#pragma acc routine. to .\[void \]*g_6\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" "" { target *-*-* } .-1 } */ \
293 gang gang gang /* { dg-error "too many 'gang' clauses" } */ \
294 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
295 vector vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
296 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
297 worker worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
298 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
299
300 #pragma acc routine \
301 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
302 seq seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
303 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
304 vector vector vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
305 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
306 gang gang /* { dg-error "too many 'gang' clauses" } */ \
307 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
308 extern void w_6 (void);
309 #pragma acc routine (w_6) \
310 vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
311 /* { dg-error "incompatible .vector. clause when applying .#pragma acc routine. to .\[void \]*w_6\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" "" { target *-*-* } .-1 } */ \
312 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
313 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
314 seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
315 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
316 gang gang /* { dg-error "too many 'gang' clauses" } */ \
317 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
318 #pragma acc routine (w_6) \
319 seq seq /* { dg-error "too many 'seq' clauses" } */ \
320 /* { dg-error "incompatible .seq. clause when applying .#pragma acc routine. to .\[void \]*w_6\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" "" { target *-*-* } .-1 } */ \
321 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
322 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
323 gang gang /* { dg-error "too many 'gang' clauses" } */ \
324 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
325 vector vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
326 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
327
328 #pragma acc routine \
329 vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
330 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
331 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
332 seq seq seq seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
333 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
334 gang gang /* { dg-error "too many 'gang' clauses" } */ \
335 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
336 extern void v_6 (void);
337 #pragma acc routine (v_6) \
338 seq seq seq seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
339 /* { dg-error "incompatible .seq. clause when applying .#pragma acc routine. to .\[void \]*v_6\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" "" { target *-*-* } .-1 } */ \
340 vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
341 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
342 worker worker /* { dg-error "too many 'worker' clauses" } */ \
343 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
344 gang gang /* { dg-error "too many 'gang' clauses" } */ \
345 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
346 #pragma acc routine (v_6) \
347 gang gang /* { dg-error "too many 'gang' clauses" } */ \
348 /* { dg-error "incompatible .gang. clause when applying .#pragma acc routine. to .\[void \]*v_6\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" "" { target *-*-* } .-1 } */ \
349 vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
350 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
351 seq seq seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
352 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
353 worker worker /* { dg-error "too many 'worker' clauses" } */ \
354 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
355
356 extern void s_6 (void);
357 #pragma acc routine (s_6) \
358 seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
359 vector vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
360 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
361 worker worker worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
362 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
363 gang gang /* { dg-error "too many 'gang' clauses" } */ \
364 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
365 #pragma acc routine (s_6) \
366 vector vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
367 /* { dg-error "incompatible .vector. clause when applying .#pragma acc routine. to .\[void \]*s_6\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" "" { target *-*-* } .-1 } */ \
368 seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
369 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
370 gang gang /* { dg-error "too many 'gang' clauses" } */ \
371 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
372 worker worker worker /* { dg-error "too many 'worker' clauses" } */ \
373 /* { dg-error ".worker. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
374 #pragma acc routine (s_6) \
375 worker worker /* { dg-error "too many 'worker' clauses" } */ \
376 /* { dg-error "incompatible .worker. clause when applying .#pragma acc routine. to .\[void \]*s_6\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" "" { target *-*-* } .-1 } */ \
377 seq seq seq /* { dg-error "too many 'seq' clauses" } */ \
378 /* { dg-error ".seq. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
379 vector vector vector vector /* { dg-error "too many 'vector' clauses" } */ \
380 /* { dg-error ".vector. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */ \
381 gang gang /* { dg-error "too many 'gang' clauses" } */ \
382 /* { dg-error ".gang. specifies a conflicting level of parallelism" "" { target *-*-* } .-1 } */
383
384
385 /* Like the *_6 tests, but without all the duplicate clauses, so that the
386 routine directives are valid in isolation. */
387
388 #pragma acc routine \
389 gang
g_7(void)390 void g_7 (void)
391 {
392 }
393 #pragma acc routine (g_7) \
394 vector /* { dg-error "incompatible .vector. clause when applying .#pragma acc routine. to .\[void \]*g_7\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" } */
395 #pragma acc routine (g_7) \
396 seq /* { dg-error "incompatible .seq. clause when applying .#pragma acc routine. to .\[void \]*g_7\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" } */
397
398 #pragma acc routine \
399 worker
400 extern void w_7 (void);
401 #pragma acc routine (w_7) \
402 vector /* { dg-error "incompatible .vector. clause when applying .#pragma acc routine. to .\[void \]*w_7\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" } */
403 #pragma acc routine (w_7) \
404 seq /* { dg-error "incompatible .seq. clause when applying .#pragma acc routine. to .\[void \]*w_7\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" } */
405
406 #pragma acc routine \
407 vector
408 extern void v_7 (void);
409 #pragma acc routine (v_7) \
410 seq /* { dg-error "incompatible .seq. clause when applying .#pragma acc routine. to .\[void \]*v_7\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" } */
411 #pragma acc routine (v_7) \
412 gang /* { dg-error "incompatible .gang. clause when applying .#pragma acc routine. to .\[void \]*v_7\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" } */
413
414 extern void s_7 (void);
415 #pragma acc routine (s_7) \
416 seq
417 #pragma acc routine (s_7) \
418 vector /* { dg-error "incompatible .vector. clause when applying .#pragma acc routine. to .\[void \]*s_7\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" } */
419 #pragma acc routine (s_7) \
420 worker /* { dg-error "incompatible .worker. clause when applying .#pragma acc routine. to .\[void \]*s_7\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" } */
421
422
423 /* Test cases for implicit seq clause. */
424
425 #pragma acc routine \
426 gang
g_8(void)427 void g_8 (void)
428 {
429 }
430 #pragma acc routine (g_8) /* { dg-error "incompatible .seq. clause when applying .#pragma acc routine. to .\[void \]*g_8\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" } */
431
432 #pragma acc routine \
433 worker
434 extern void w_8 (void);
435 #pragma acc routine (w_8) /* { dg-error "incompatible .seq. clause when applying .#pragma acc routine. to .\[void \]*w_8\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" } */
436
437 #pragma acc routine \
438 vector
439 extern void v_8 (void);
440 #pragma acc routine (v_8) /* { dg-error "incompatible .seq. clause when applying .#pragma acc routine. to .\[void \]*v_8\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" } */
441
442 extern void s_8 (void);
443 #pragma acc routine (s_8)
444 #pragma acc routine (s_8) \
445 vector /* { dg-error "incompatible .vector. clause when applying .#pragma acc routine. to .\[void \]*s_8\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" } */
446 #pragma acc routine (s_8) \
447 gang /* { dg-error "incompatible .gang. clause when applying .#pragma acc routine. to .\[void \]*s_8\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" } */
448 #pragma acc routine (s_8) \
449 worker /* { dg-error "incompatible .worker. clause when applying .#pragma acc routine. to .\[void \]*s_8\[\\(\\)\]*., which has already been marked with an OpenACC 'routine' directive" } */
450