1 /* Invalid use of OpenACC parallelism dimensions clauses: 'num_gangs',
2    'num_workers', 'vector_length'.  */
3 
4 /* See also '../../gfortran.dg/goacc/parallel-dims-2.f90'.  */
5 
f(int i,float f)6 void f(int i, float f)
7 {
8 #pragma acc kernels num_gangs /* { dg-error "expected '\\(' before end of line" } */
9   ;
10 #pragma acc kernels num_workers /* { dg-error "expected '\\(' before end of line" } */
11   ;
12 #pragma acc kernels vector_length /* { dg-error "expected '\\(' before end of line" } */
13   ;
14 
15 #pragma acc parallel num_gangs /* { dg-error "expected '\\(' before end of line" } */
16   ;
17 #pragma acc parallel num_workers /* { dg-error "expected '\\(' before end of line" } */
18   ;
19 #pragma acc parallel vector_length /* { dg-error "expected '\\(' before end of line" } */
20   ;
21 
22 
23 #pragma acc kernels num_gangs( /* { dg-error "expected (primary-|)expression before end of line" } */
24   ;
25 #pragma acc kernels num_workers( /* { dg-error "expected (primary-|)expression before end of line" } */
26   ;
27 #pragma acc kernels vector_length( /* { dg-error "expected (primary-|)expression before end of line" } */
28   ;
29 
30 #pragma acc parallel num_gangs( /* { dg-error "expected (primary-|)expression before end of line" } */
31   ;
32 #pragma acc parallel num_workers( /* { dg-error "expected (primary-|)expression before end of line" } */
33   ;
34 #pragma acc parallel vector_length( /* { dg-error "expected (primary-|)expression before end of line" } */
35   ;
36 
37 
38 #pragma acc kernels num_gangs() /* { dg-error "expected (primary-|)expression before '\\)' token" } */
39   ;
40 #pragma acc kernels num_workers() /* { dg-error "expected (primary-|)expression before '\\)' token" } */
41   ;
42 #pragma acc kernels vector_length() /* { dg-error "expected (primary-|)expression before '\\)' token" } */
43   ;
44 
45 #pragma acc parallel num_gangs() /* { dg-error "expected (primary-|)expression before '\\)' token" } */
46   ;
47 #pragma acc parallel num_workers() /* { dg-error "expected (primary-|)expression before '\\)' token" } */
48   ;
49 #pragma acc parallel vector_length() /* { dg-error "expected (primary-|)expression before '\\)' token" } */
50   ;
51 
52 
53 #pragma acc kernels num_gangs(1 /* { dg-error "expected '\\)' before end of line" } */
54   ;
55 #pragma acc kernels num_workers(1 /* { dg-error "expected '\\)' before end of line" } */
56   ;
57 #pragma acc kernels vector_length(1 /* { dg-error "expected '\\)' before end of line" } */
58   ;
59 
60 #pragma acc parallel num_gangs(1 /* { dg-error "expected '\\)' before end of line" } */
61   ;
62 #pragma acc parallel num_workers(1 /* { dg-error "expected '\\)' before end of line" } */
63   ;
64 #pragma acc parallel vector_length(1 /* { dg-error "expected '\\)' before end of line" } */
65   ;
66 
67 
68 #pragma acc kernels num_gangs(i /* { dg-error "expected '\\)' before end of line" } */
69   ;
70 #pragma acc kernels num_workers(i /* { dg-error "expected '\\)' before end of line" } */
71   ;
72 #pragma acc kernels vector_length(i /* { dg-error "expected '\\)' before end of line" } */
73   ;
74 
75 #pragma acc parallel num_gangs(i /* { dg-error "expected '\\)' before end of line" } */
76   ;
77 #pragma acc parallel num_workers(i /* { dg-error "expected '\\)' before end of line" } */
78   ;
79 #pragma acc parallel vector_length(i /* { dg-error "expected '\\)' before end of line" } */
80   ;
81 
82 
83 #pragma acc kernels num_gangs(1 i /* { dg-error "expected '\\)' before 'i'" } */
84   ;
85 #pragma acc kernels num_workers(1 i /* { dg-error "expected '\\)' before 'i'" } */
86   ;
87 #pragma acc kernels vector_length(1 i /* { dg-error "expected '\\)' before 'i'" } */
88   ;
89 
90 #pragma acc parallel num_gangs(1 i /* { dg-error "expected '\\)' before 'i'" } */
91   ;
92 #pragma acc parallel num_workers(1 i /* { dg-error "expected '\\)' before 'i'" } */
93   ;
94 #pragma acc parallel vector_length(1 i /* { dg-error "expected '\\)' before 'i'" } */
95   ;
96 
97 
98 #pragma acc kernels num_gangs(1 i) /* { dg-error "expected '\\)' before 'i'" } */
99   ;
100 #pragma acc kernels num_workers(1 i) /* { dg-error "expected '\\)' before 'i'" } */
101   ;
102 #pragma acc kernels vector_length(1 i) /* { dg-error "expected '\\)' before 'i'" } */
103   ;
104 
105 #pragma acc parallel num_gangs(1 i) /* { dg-error "expected '\\)' before 'i'" } */
106   ;
107 #pragma acc parallel num_workers(1 i) /* { dg-error "expected '\\)' before 'i'" } */
108   ;
109 #pragma acc parallel vector_length(1 i) /* { dg-error "expected '\\)' before 'i'" } */
110   ;
111 
112 
113 #pragma acc kernels num_gangs(1, i /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
114   /* { dg-bogus "expected '\\)' before end of line" "TODO" { xfail c } .-1 } */
115   ;
116 #pragma acc kernels num_workers(1, i /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
117   /* { dg-bogus "expected '\\)' before end of line" "TODO" { xfail c } .-1 } */
118   ;
119 #pragma acc kernels vector_length(1, i /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
120   /* { dg-bogus "expected '\\)' before end of line" "TODO" { xfail c } .-1 } */
121   ;
122 
123 #pragma acc parallel num_gangs(1, i /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
124   /* { dg-bogus "expected '\\)' before end of line" "TODO" { xfail c } .-1 } */
125   ;
126 #pragma acc parallel num_workers(1, i /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
127   /* { dg-bogus "expected '\\)' before end of line" "TODO" { xfail c } .-1 } */
128   ;
129 #pragma acc parallel vector_length(1, i /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
130   /* { dg-bogus "expected '\\)' before end of line" "TODO" { xfail c } .-1 } */
131   ;
132 
133 
134 #pragma acc kernels num_gangs(1, i) /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
135   ;
136 #pragma acc kernels num_workers(1, i) /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
137   ;
138 #pragma acc kernels vector_length(1, i) /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
139   ;
140 
141 #pragma acc parallel num_gangs(1, i) /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
142   ;
143 #pragma acc parallel num_workers(1, i) /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
144   ;
145 #pragma acc parallel vector_length(1, i) /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
146   ;
147 
148 
149 #pragma acc kernels num_gangs(num_gangs_k) /* { dg-error "'num_gangs_k' (un|was not )declared" } */
150   ;
151 #pragma acc kernels num_workers(num_workers_k) /* { dg-error "'num_workers_k' (un|was not )declared" } */
152   ;
153 #pragma acc kernels vector_length(vector_length_k) /* { dg-error "'vector_length_k' (un|was not )declared" } */
154   ;
155 
156 #pragma acc parallel num_gangs(num_gangs_p) /* { dg-error "'num_gangs_p' (un|was not )declared" } */
157   ;
158 #pragma acc parallel num_workers(num_workers_p) /* { dg-error "'num_workers_p' (un|was not )declared" } */
159   ;
160 #pragma acc parallel vector_length(vector_length_p) /* { dg-error "'vector_length_p' (un|was not )declared" } */
161   ;
162 
163 
164 #pragma acc kernels num_gangs(f) /* { dg-error "'num_gangs' expression must be integral" } */
165   ;
166 #pragma acc kernels num_workers(f) /* { dg-error "'num_workers' expression must be integral" } */
167   ;
168 #pragma acc kernels vector_length(f) /* { dg-error "'vector_length' expression must be integral" } */
169   ;
170 
171 #pragma acc parallel num_gangs(f) /* { dg-error "'num_gangs' expression must be integral" } */
172   ;
173 #pragma acc parallel num_workers(f) /* { dg-error "'num_workers' expression must be integral" } */
174   ;
175 #pragma acc parallel vector_length(f) /* { dg-error "'vector_length' expression must be integral" } */
176   ;
177 
178 
179 #pragma acc kernels num_gangs((float) 1) /* { dg-error "'num_gangs' expression must be integral" } */
180   ;
181 #pragma acc kernels num_workers((float) 1) /* { dg-error "'num_workers' expression must be integral" } */
182   ;
183 #pragma acc kernels vector_length((float) 1) /* { dg-error "'vector_length' expression must be integral" } */
184   ;
185 
186 #pragma acc parallel num_gangs((float) 1) /* { dg-error "'num_gangs' expression must be integral" } */
187   ;
188 #pragma acc parallel num_workers((float) 1) /* { dg-error "'num_workers' expression must be integral" } */
189   ;
190 #pragma acc parallel vector_length((float) 1) /* { dg-error "'vector_length' expression must be integral" } */
191   ;
192 
193 
194 #pragma acc kernels num_gangs(0) /* { dg-warning "'num_gangs' value must be positive" } */
195   ;
196 #pragma acc kernels num_workers(0) /* { dg-warning "'num_workers' value must be positive" } */
197   ;
198 #pragma acc kernels vector_length(0) /* { dg-warning "'vector_length' value must be positive" } */
199   ;
200 
201 #pragma acc parallel num_gangs(0) /* { dg-warning "'num_gangs' value must be positive" } */
202   ;
203 #pragma acc parallel num_workers(0) /* { dg-warning "'num_workers' value must be positive" } */
204   ;
205 #pragma acc parallel vector_length(0) /* { dg-warning "'vector_length' value must be positive" } */
206   ;
207 
208 
209 #pragma acc kernels num_gangs((int) -1.2) /* { dg-warning "'num_gangs' value must be positive" } */
210   ;
211 #pragma acc kernels num_workers((int) -1.2) /* { dg-warning "'num_workers' value must be positive" } */
212   ;
213 #pragma acc kernels vector_length((int) -1.2) /* { dg-warning "'vector_length' value must be positive" } */
214   ;
215 
216 #pragma acc parallel num_gangs((int) -1.2) /* { dg-warning "'num_gangs' value must be positive" } */
217   ;
218 #pragma acc parallel num_workers((int) -1.2) /* { dg-warning "'num_workers' value must be positive" } */
219   ;
220 #pragma acc parallel vector_length((int) -1.2) /* { dg-warning "'vector_length' value must be positive" } */
221   ;
222 
223 
224 #pragma acc kernels \
225   num_gangs(1) /* { dg-error "too many 'num_gangs' clauses" "" { target c } } */ \
226   num_workers(1) /* { dg-error "too many 'num_workers' clauses" "" { target c } } */ \
227   vector_length(1) /* { dg-error "too many 'vector_length' clauses" "" { target c } } */ \
228   num_workers(1) /* { dg-error "too many 'num_workers' clauses" "" { target c++ } } */ \
229   vector_length(1) /* { dg-error "too many 'vector_length' clauses" "" { target c++ } } */ \
230   num_gangs(1) /* { dg-error "too many 'num_gangs' clauses" "" { target c++ } } */
231   ;
232 
233 #pragma acc parallel							\
234   num_gangs(1) /* { dg-error "too many 'num_gangs' clauses" "" { target c } } */ \
235   num_workers(1) /* { dg-error "too many 'num_workers' clauses" "" { target c } } */ \
236   vector_length(1) /* { dg-error "too many 'vector_length' clauses" "" { target c } } */ \
237   num_workers(1) /* { dg-error "too many 'num_workers' clauses" "" { target c++ } } */ \
238   vector_length(1) /* { dg-error "too many 'vector_length' clauses" "" { target c++ } } */ \
239   num_gangs(1) /* { dg-error "too many 'num_gangs' clauses" "" { target c++ } } */
240   ;
241 
242 
243 #pragma acc kernels \
244   num_gangs(-1) /* { dg-warning "'num_gangs' value must be positive" } */ \
245   num_workers() /* { dg-error "expected (primary-|)expression before '\\)' token" } */ \
246   vector_length(abc_k) /* { dg-error "'abc_k' (un|was not )declared" } */ \
247   num_workers(0.5) /* { dg-error "'num_workers' expression must be integral" } */ \
248   vector_length(&f) /* { dg-error "'vector_length' expression must be integral" } */ \
249   num_gangs( /* { dg-error "expected (primary-|)expression before end of line" "TODO" { xfail c } } */
250   ;
251 
252 #pragma acc parallel							\
253   num_gangs(-1) /* { dg-warning "'num_gangs' value must be positive" } */ \
254   num_workers() /* { dg-error "expected (primary-|)expression before '\\)' token" } */ \
255   vector_length(abc_p) /* { dg-error "'abc_p' (un|was not )declared" } */ \
256   num_workers(0.5) /* { dg-error "'num_workers' expression must be integral" } */ \
257   vector_length(&f) /* { dg-error "'vector_length' expression must be integral" } */ \
258   num_gangs( /* { dg-error "expected (primary-|)expression before end of line" "TODO" { xfail c } } */
259   ;
260 
261 
262   /* The 'serial' construct doesn't allow these at all.  */
263 
264 #pragma acc serial num_gangs (1) /* { dg-error "'num_gangs' is not valid for '#pragma acc serial'" } */
265   ;
266 #pragma acc serial num_workers (1) /* { dg-error "'num_workers' is not valid for '#pragma acc serial'" } */
267   ;
268 #pragma acc serial vector_length (1) /* { dg-error "'vector_length' is not valid for '#pragma acc serial'" } */
269   ;
270 }
271