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