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