blob: 58f10ac5daa8e7032253c44939376696ef75a1c9 [file] [log] [blame]
Alexey Bataev186b28a2014-03-06 05:43:53 +00001// RUN: %clang_cc1 -fsyntax-only -fopenmp=libiomp5 -verify %s
Alexey Bataev1b59ab52014-02-27 08:29:12 +00002
3// expected-error@+1 {{unexpected OpenMP directive '#pragma omp simd'}}
4#pragma omp simd
5
6// expected-error@+1 {{unexpected OpenMP directive '#pragma omp simd'}}
7#pragma omp simd foo
8
9// expected-error@+1 {{unexpected OpenMP directive '#pragma omp simd'}}
10#pragma omp simd safelen(4)
11
12void test_no_clause()
13{
14 int i;
15 #pragma omp simd
16 for (i = 0; i < 16; ++i) ;
17
18 // expected-error@+2 {{statement after '#pragma omp simd' must be a for loop}}
19 #pragma omp simd
20 ++i;
21}
22
23void test_branch_protected_scope()
24{
25 int i = 0;
26L1:
27 ++i;
28
29 int x[24];
30
31 #pragma omp simd
32 for (i = 0; i < 16; ++i) {
33 if (i == 5)
34 goto L1; // expected-error {{use of undeclared label 'L1'}}
35 else if (i == 6)
36 return; // expected-error {{cannot return from OpenMP region}}
37 else if (i == 7)
38 goto L2;
39 else if (i == 8) {
40L2:
41 x[i]++;
42 }
43 }
44
45 if (x[0] == 0)
46 goto L2; // expected-error {{use of undeclared label 'L2'}}
47 else if (x[1] == 1)
48 goto L1;
49}
50
51void test_invalid_clause()
52{
53 int i;
54 // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}
55 #pragma omp simd foo bar
56 for (i = 0; i < 16; ++i) ;
57}
58
59void test_non_identifiers()
60{
61 int i, x;
Alexey Bataev2759a7c2014-03-05 07:21:14 +000062
Alexey Bataev1b59ab52014-02-27 08:29:12 +000063 // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}
64 #pragma omp simd;
65 for (i = 0; i < 16; ++i) ;
66 // expected-error@+2 {{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp simd'}}
67 // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}
68 #pragma omp simd firstprivate(x);
69 for (i = 0; i < 16; ++i) ;
Alexey Bataev2759a7c2014-03-05 07:21:14 +000070
71 // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}
72 #pragma omp simd private(x);
73 for (i = 0; i < 16; ++i) ;
74
Alexey Bataev1b59ab52014-02-27 08:29:12 +000075 // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}
76 #pragma omp simd , private(x);
77 for (i = 0; i < 16; ++i) ;
78}
79
Alexey Bataev62c87d22014-03-21 04:51:18 +000080extern int foo();
81void test_safelen()
82{
83 int i;
84 // expected-error@+1 {{expected '('}}
85 #pragma omp simd safelen
86 for (i = 0; i < 16; ++i) ;
87 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
88 #pragma omp simd safelen(
89 for (i = 0; i < 16; ++i) ;
90 // expected-error@+1 {{expected expression}}
91 #pragma omp simd safelen()
92 for (i = 0; i < 16; ++i) ;
93 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
94 #pragma omp simd safelen(,
95 for (i = 0; i < 16; ++i) ;
96 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
97 #pragma omp simd safelen(,)
98 for (i = 0; i < 16; ++i) ;
99 // expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}}
100 // expected-error@+1 {{expected '('}}
101 #pragma omp simd safelen 4)
102 for (i = 0; i < 16; ++i) ;
103 // expected-error@+2 {{expected ')'}}
104 // expected-note@+1 {{to match this '('}}
105 #pragma omp simd safelen(4
106 for (i = 0; i < 16; ++i) ;
107 // expected-error@+2 {{expected ')'}}
108 // expected-note@+1 {{to match this '('}}
109 #pragma omp simd safelen(4,
110 for (i = 0; i < 16; ++i) ;
111 // expected-error@+2 {{expected ')'}}
112 // expected-note@+1 {{to match this '('}}
113 #pragma omp simd safelen(4,)
114 for (i = 0; i < 16; ++i) ;
115 // xxpected-error@+1 {{expected expression}}
116 #pragma omp simd safelen(4)
117 for (i = 0; i < 16; ++i) ;
118 // expected-error@+2 {{expected ')'}}
119 // expected-note@+1 {{to match this '('}}
120 #pragma omp simd safelen(4 4)
121 for (i = 0; i < 16; ++i) ;
122 // expected-error@+2 {{expected ')'}}
123 // expected-note@+1 {{to match this '('}}
124 #pragma omp simd safelen(4,,4)
125 for (i = 0; i < 16; ++i) ;
126 #pragma omp simd safelen(4)
127 for (i = 0; i < 16; ++i) ;
128 // expected-error@+2 {{expected ')'}}
129 // expected-note@+1 {{to match this '('}}
130 #pragma omp simd safelen(4,8)
131 for (i = 0; i < 16; ++i) ;
132 // expected-error@+1 {{expression is not an integer constant expression}}
133 #pragma omp simd safelen(2.5)
134 for (i = 0; i < 16; ++i);
135 // expected-error@+1 {{expression is not an integer constant expression}}
136 #pragma omp simd safelen(foo())
137 for (i = 0; i < 16; ++i);
138 // expected-error@+1 {{argument to 'safelen' clause must be a positive integer value}}
139 #pragma omp simd safelen(-5)
140 for (i = 0; i < 16; ++i);
141 // expected-error@+1 {{argument to 'safelen' clause must be a positive integer value}}
142 #pragma omp simd safelen(0)
143 for (i = 0; i < 16; ++i);
144 // expected-error@+1 {{argument to 'safelen' clause must be a positive integer value}}
145 #pragma omp simd safelen(5-5)
146 for (i = 0; i < 16; ++i);
147}
148
Alexander Musman8bd31e62014-05-27 15:12:19 +0000149void test_collapse()
150{
151 int i;
152 // expected-error@+1 {{expected '('}}
153 #pragma omp simd collapse
154 for (i = 0; i < 16; ++i) ;
155 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
156 #pragma omp simd collapse(
157 for (i = 0; i < 16; ++i) ;
158 // expected-error@+1 {{expected expression}}
159 #pragma omp simd collapse()
160 for (i = 0; i < 16; ++i) ;
161 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
162 #pragma omp simd collapse(,
163 for (i = 0; i < 16; ++i) ;
164 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
165 #pragma omp simd collapse(,)
166 for (i = 0; i < 16; ++i) ;
167 // expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}}
168 // expected-error@+1 {{expected '('}}
169 #pragma omp simd collapse 4)
170 for (i = 0; i < 16; ++i) ;
171 // expected-error@+2 {{expected ')'}}
172 // expected-note@+1 {{to match this '('}}
173 #pragma omp simd collapse(4
174 for (i = 0; i < 16; ++i) ;
175 // expected-error@+2 {{expected ')'}}
176 // expected-note@+1 {{to match this '('}}
177 #pragma omp simd collapse(4,
178 for (i = 0; i < 16; ++i) ;
179 // expected-error@+2 {{expected ')'}}
180 // expected-note@+1 {{to match this '('}}
181 #pragma omp simd collapse(4,)
182 for (i = 0; i < 16; ++i) ;
183 // xxpected-error@+1 {{expected expression}}
184 #pragma omp simd collapse(4)
185 for (i = 0; i < 16; ++i) ;
186 // expected-error@+2 {{expected ')'}}
187 // expected-note@+1 {{to match this '('}}
188 #pragma omp simd collapse(4 4)
189 for (i = 0; i < 16; ++i) ;
190 // expected-error@+2 {{expected ')'}}
191 // expected-note@+1 {{to match this '('}}
192 #pragma omp simd collapse(4,,4)
193 for (i = 0; i < 16; ++i) ;
194 #pragma omp simd collapse(4)
195 for (int i1 = 0; i1 < 16; ++i1)
196 for (int i2 = 0; i2 < 16; ++i2)
197 for (int i3 = 0; i3 < 16; ++i3)
198 for (int i4 = 0; i4 < 16; ++i4)
199 foo();
200 // expected-error@+2 {{expected ')'}}
201 // expected-note@+1 {{to match this '('}}
202 #pragma omp simd collapse(4,8)
203 for (i = 0; i < 16; ++i) ;
204 // expected-error@+1 {{expression is not an integer constant expression}}
205 #pragma omp simd collapse(2.5)
206 for (i = 0; i < 16; ++i);
207 // expected-error@+1 {{expression is not an integer constant expression}}
208 #pragma omp simd collapse(foo())
209 for (i = 0; i < 16; ++i);
210 // expected-error@+1 {{argument to 'collapse' clause must be a positive integer value}}
211 #pragma omp simd collapse(-5)
212 for (i = 0; i < 16; ++i);
213 // expected-error@+1 {{argument to 'collapse' clause must be a positive integer value}}
214 #pragma omp simd collapse(0)
215 for (i = 0; i < 16; ++i);
216 // expected-error@+1 {{argument to 'collapse' clause must be a positive integer value}}
217 #pragma omp simd collapse(5-5)
218 for (i = 0; i < 16; ++i);
219}
220
Alexander Musman8dba6642014-04-22 13:09:42 +0000221void test_linear()
222{
223 int i;
224 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
225 #pragma omp simd linear(
226 for (i = 0; i < 16; ++i) ;
227 // expected-error@+2 {{expected expression}}
228 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
229 #pragma omp simd linear(,
230 for (i = 0; i < 16; ++i) ;
231 // expected-error@+2 {{expected expression}}
232 // expected-error@+1 {{expected expression}}
233 #pragma omp simd linear(,)
234 for (i = 0; i < 16; ++i) ;
235 // expected-error@+1 {{expected expression}}
236 #pragma omp simd linear()
237 for (i = 0; i < 16; ++i) ;
238 // expected-error@+1 {{expected expression}}
239 #pragma omp simd linear(int)
240 for (i = 0; i < 16; ++i) ;
241 // expected-error@+1 {{expected variable name}}
242 #pragma omp simd linear(0)
243 for (i = 0; i < 16; ++i) ;
244 // expected-error@+1 {{use of undeclared identifier 'x'}}
245 #pragma omp simd linear(x)
246 for (i = 0; i < 16; ++i) ;
247 // expected-error@+2 {{use of undeclared identifier 'x'}}
248 // expected-error@+1 {{use of undeclared identifier 'y'}}
249 #pragma omp simd linear(x, y)
250 for (i = 0; i < 16; ++i) ;
251 // expected-error@+3 {{use of undeclared identifier 'x'}}
252 // expected-error@+2 {{use of undeclared identifier 'y'}}
253 // expected-error@+1 {{use of undeclared identifier 'z'}}
254 #pragma omp simd linear(x, y, z)
255 for (i = 0; i < 16; ++i) ;
256
257 int x, y;
258 // expected-error@+1 {{expected expression}}
259 #pragma omp simd linear(x:)
260 for (i = 0; i < 16; ++i) ;
261 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
262 #pragma omp simd linear(x:,)
263 for (i = 0; i < 16; ++i) ;
264 #pragma omp simd linear(x:1)
265 for (i = 0; i < 16; ++i) ;
266 #pragma omp simd linear(x:2*2)
267 for (i = 0; i < 16; ++i) ;
268 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
269 #pragma omp simd linear(x:1,y)
270 for (i = 0; i < 16; ++i) ;
271 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
272 #pragma omp simd linear(x:1,y,z:1)
273 for (i = 0; i < 16; ++i) ;
274
275 // expected-note@+2 {{defined as linear}}
276 // expected-error@+1 {{linear variable cannot be linear}}
277 #pragma omp simd linear(x) linear(x)
278 for (i = 0; i < 16; ++i) ;
279
280 // expected-note@+2 {{defined as private}}
281 // expected-error@+1 {{private variable cannot be linear}}
282 #pragma omp simd private(x) linear(x)
283 for (i = 0; i < 16; ++i) ;
284
285 // expected-note@+2 {{defined as linear}}
286 // expected-error@+1 {{linear variable cannot be private}}
287 #pragma omp simd linear(x) private(x)
288 for (i = 0; i < 16; ++i) ;
289
290 // expected-warning@+1 {{zero linear step (x and other variables in clause should probably be const)}}
291 #pragma omp simd linear(x,y:0)
292 for (i = 0; i < 16; ++i) ;
293}
294
Alexey Bataev2759a7c2014-03-05 07:21:14 +0000295void test_private()
296{
297 int i;
298 // expected-error@+2 {{expected expression}}
299 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
300 #pragma omp simd private(
301 for (i = 0; i < 16; ++i) ;
302 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
303 // expected-error@+1 2 {{expected expression}}
304 #pragma omp simd private(,
305 for (i = 0; i < 16; ++i) ;
306 // expected-error@+1 2 {{expected expression}}
307 #pragma omp simd private(,)
308 for (i = 0; i < 16; ++i) ;
309 // expected-error@+1 {{expected expression}}
310 #pragma omp simd private()
311 for (i = 0; i < 16; ++i) ;
312 // expected-error@+1 {{expected expression}}
313 #pragma omp simd private(int)
314 for (i = 0; i < 16; ++i) ;
315 // expected-error@+1 {{expected variable name}}
316 #pragma omp simd private(0)
317 for (i = 0; i < 16; ++i) ;
318
319 int x, y, z;
320 #pragma omp simd private(x)
321 for (i = 0; i < 16; ++i) ;
322 #pragma omp simd private(x, y)
323 for (i = 0; i < 16; ++i) ;
324 #pragma omp simd private(x, y, z)
325 for (i = 0; i < 16; ++i) {
326 x = y * i + z;
327 }
328}
329
330void test_firstprivate()
331{
332 int i;
333 // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
334 // expected-error@+2 {{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp simd'}}
335 // expected-error@+1 {{expected expression}}
336 #pragma omp simd firstprivate(
337 for (i = 0; i < 16; ++i) ;
338}
Alexey Bataev62c87d22014-03-21 04:51:18 +0000339