1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -verify=expected,omp45 %s -Wuninitialized
2 // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=50 -verify=expected,omp50 %s -Wuninitialized
3 
4 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=45 -verify=expected,omp45 %s -Wuninitialized
5 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=50 -verify=expected,omp50 %s -Wuninitialized
6 
7 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp target parallel for simd'}}
8 #pragma omp target parallel for simd
9 
10 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp target parallel for simd'}}
11 #pragma omp target parallel for simd foo
12 
test_no_clause()13 void test_no_clause() {
14   int i;
15 #pragma omp target parallel for simd
16   for (i = 0; i < 16; ++i)
17     ;
18 
19 // expected-error@+2 {{statement after '#pragma omp target parallel for simd' must be a for loop}}
20 #pragma omp target parallel for simd
21   ++i;
22 }
23 
test_branch_protected_scope()24 void test_branch_protected_scope() {
25   int i = 0;
26 L1:
27   ++i;
28 
29   int x[24];
30 
31 #pragma omp target parallel for 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) {
40     L2:
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 
test_invalid_clause()51 void test_invalid_clause() {
52   int i;
53 // expected-warning@+1 {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}}
54 #pragma omp target parallel for simd foo bar
55   for (i = 0; i < 16; ++i)
56     ;
57 }
58 
test_non_identifiers()59 void test_non_identifiers() {
60   int i, x;
61 
62 // expected-warning@+1 {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}}
63 #pragma omp target parallel for simd;
64   for (i = 0; i < 16; ++i)
65     ;
66 
67 // expected-warning@+1 {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}}
68 #pragma omp target parallel for simd private(x);
69   for (i = 0; i < 16; ++i)
70     ;
71 
72 // expected-warning@+1 {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}}
73 #pragma omp target parallel for simd, private(x);
74   for (i = 0; i < 16; ++i)
75     ;
76 }
77 
78 extern int foo();
79 
test_collapse()80 void test_collapse() {
81   int i;
82 // expected-error@+1 {{expected '('}}
83 #pragma omp target parallel for simd collapse
84   for (i = 0; i < 16; ++i)
85     ;
86 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
87 #pragma omp target parallel for simd collapse(
88   for (i = 0; i < 16; ++i)
89     ;
90 // expected-error@+1 {{expected expression}}
91 #pragma omp target parallel for simd collapse()
92   for (i = 0; i < 16; ++i)
93     ;
94 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
95 #pragma omp target parallel for simd collapse(,
96   for (i = 0; i < 16; ++i)
97     ;
98 // expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
99 #pragma omp target parallel for simd collapse(, )
100   for (i = 0; i < 16; ++i)
101     ;
102 // expected-warning@+2 {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}}
103 // expected-error@+1 {{expected '('}}
104 #pragma omp target parallel for simd collapse 4)
105   for (i = 0; i < 16; ++i)
106     ;
107 // expected-error@+2 {{expected ')'}}
108 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
109 #pragma omp target parallel for simd collapse(4
110   for (i = 0; i < 16; ++i)
111     ; // expected-error {{expected 4 for loops after '#pragma omp target parallel for simd', but found only 1}}
112 // expected-error@+2 {{expected ')'}}
113 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
114 #pragma omp target parallel for simd collapse(4,
115   for (i = 0; i < 16; ++i)
116     ; // expected-error {{expected 4 for loops after '#pragma omp target parallel for simd', but found only 1}}
117 // expected-error@+2 {{expected ')'}}
118 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
119 #pragma omp target parallel for simd collapse(4, )
120   for (i = 0; i < 16; ++i)
121     ; // expected-error {{expected 4 for loops after '#pragma omp target parallel for simd', but found only 1}}
122 // expected-note@+1 {{as specified in 'collapse' clause}}
123 #pragma omp target parallel for simd collapse(4)
124   for (i = 0; i < 16; ++i)
125     ; // expected-error {{expected 4 for loops after '#pragma omp target parallel for simd', but found only 1}}
126 // expected-error@+2 {{expected ')'}}
127 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
128 #pragma omp target parallel for simd collapse(4 4)
129   for (i = 0; i < 16; ++i)
130     ; // expected-error {{expected 4 for loops after '#pragma omp target parallel for simd', but found only 1}}
131 // expected-error@+2 {{expected ')'}}
132 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
133 #pragma omp target parallel for simd collapse(4, , 4)
134   for (i = 0; i < 16; ++i)
135     ; // expected-error {{expected 4 for loops after '#pragma omp target parallel for simd', but found only 1}}
136 #pragma omp target parallel for simd collapse(4)
137   for (int i1 = 0; i1 < 16; ++i1)
138     for (int i2 = 0; i2 < 16; ++i2)
139       for (int i3 = 0; i3 < 16; ++i3)
140         for (int i4 = 0; i4 < 16; ++i4)
141           foo();
142 // expected-error@+2 {{expected ')'}}
143 // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
144 #pragma omp target parallel for simd collapse(4, 8)
145   for (i = 0; i < 16; ++i)
146     ; // expected-error {{expected 4 for loops after '#pragma omp target parallel for simd', but found only 1}}
147 // expected-error@+1 {{integer constant expression}}
148 #pragma omp target parallel for simd collapse(2.5)
149   for (i = 0; i < 16; ++i)
150     ;
151 // expected-error@+1 {{integer constant expression}}
152 #pragma omp target parallel for simd collapse(foo())
153   for (i = 0; i < 16; ++i)
154     ;
155 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
156 #pragma omp target parallel for simd collapse(-5)
157   for (i = 0; i < 16; ++i)
158     ;
159 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
160 #pragma omp target parallel for simd collapse(0)
161   for (i = 0; i < 16; ++i)
162     ;
163 // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
164 #pragma omp target parallel for simd collapse(5 - 5)
165   for (i = 0; i < 16; ++i)
166     ;
167 // expected-note@+1 {{defined as firstprivate}}
168 #pragma omp target parallel for simd collapse(2) firstprivate(i) // expected-note {{defined as firstprivate}}
169   for (i = 0; i < 16; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp target parallel for simd' directive may not be firstprivate, predetermined as lastprivate}}
170 // expected-note@+1 {{variable with automatic storage duration is predetermined as private; perhaps you forget to enclose 'omp for' directive into a parallel or another task region?}}
171     for (int j = 0; j < 16; ++j)
172 // expected-error@+2 2 {{reduction variable must be shared}}
173 // expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}}
174 #pragma omp for reduction(+ : i, j)
175       for (int k = 0; k < 16; ++k)
176         i += j;
177 }
178 
test_private()179 void test_private() {
180   int i;
181 // expected-error@+2 {{expected expression}}
182 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
183 #pragma omp target parallel for simd private(
184   for (i = 0; i < 16; ++i)
185     ;
186 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
187 // expected-error@+1 2 {{expected expression}}
188 #pragma omp target parallel for simd private(,
189   for (i = 0; i < 16; ++i)
190     ;
191 // expected-error@+1 2 {{expected expression}}
192 #pragma omp target parallel for simd private(, )
193   for (i = 0; i < 16; ++i)
194     ;
195 // expected-error@+1 {{expected expression}}
196 #pragma omp target parallel for simd private()
197   for (i = 0; i < 16; ++i)
198     ;
199 // expected-error@+1 {{expected expression}}
200 #pragma omp target parallel for simd private(int)
201   for (i = 0; i < 16; ++i)
202     ;
203 // expected-error@+1 {{expected variable name}}
204 #pragma omp target parallel for simd private(0)
205   for (i = 0; i < 16; ++i)
206     ;
207 
208   int x, y, z;
209 #pragma omp target parallel for simd private(x)
210   for (i = 0; i < 16; ++i)
211     ;
212 #pragma omp target parallel for simd private(x, y)
213   for (i = 0; i < 16; ++i)
214     ;
215 #pragma omp target parallel for simd private(x, y, z)
216   for (i = 0; i < 16; ++i) {
217     x = y * i + z;
218   }
219 }
220 
test_lastprivate()221 void test_lastprivate() {
222   int i;
223 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
224 // expected-error@+1 {{expected expression}}
225 #pragma omp target parallel for simd lastprivate(
226   for (i = 0; i < 16; ++i)
227     ;
228 
229 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
230 // expected-error@+1 2 {{expected expression}}
231 #pragma omp target parallel for simd lastprivate(,
232   for (i = 0; i < 16; ++i)
233     ;
234 // expected-error@+1 2 {{expected expression}}
235 #pragma omp target parallel for simd lastprivate(, )
236   for (i = 0; i < 16; ++i)
237     ;
238 // expected-error@+1 {{expected expression}}
239 #pragma omp target parallel for simd lastprivate()
240   for (i = 0; i < 16; ++i)
241     ;
242 // expected-error@+1 {{expected expression}}
243 #pragma omp target parallel for simd lastprivate(int)
244   for (i = 0; i < 16; ++i)
245     ;
246 // expected-error@+1 {{expected variable name}}
247 #pragma omp target parallel for simd lastprivate(0)
248   for (i = 0; i < 16; ++i)
249     ;
250 
251   int x, y, z;
252 #pragma omp target parallel for simd lastprivate(x)
253   for (i = 0; i < 16; ++i)
254     ;
255 #pragma omp target parallel for simd lastprivate(x, y)
256   for (i = 0; i < 16; ++i)
257     ;
258 #pragma omp target parallel for simd lastprivate(x, y, z)
259   for (i = 0; i < 16; ++i)
260     ;
261 }
262 
test_firstprivate()263 void test_firstprivate() {
264   int i;
265 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
266 // expected-error@+1 {{expected expression}}
267 #pragma omp target parallel for simd firstprivate(
268   for (i = 0; i < 16; ++i)
269     ;
270 
271 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
272 // expected-error@+1 2 {{expected expression}}
273 #pragma omp target parallel for simd firstprivate(,
274   for (i = 0; i < 16; ++i)
275     ;
276 // expected-error@+1 2 {{expected expression}}
277 #pragma omp target parallel for simd firstprivate(, )
278   for (i = 0; i < 16; ++i)
279     ;
280 // expected-error@+1 {{expected expression}}
281 #pragma omp target parallel for simd firstprivate()
282   for (i = 0; i < 16; ++i)
283     ;
284 // expected-error@+1 {{expected expression}}
285 #pragma omp target parallel for simd firstprivate(int)
286   for (i = 0; i < 16; ++i)
287     ;
288 // expected-error@+1 {{expected variable name}}
289 #pragma omp target parallel for simd firstprivate(0)
290   for (i = 0; i < 16; ++i)
291     ;
292 
293   int x, y, z;
294 #pragma omp target parallel for simd lastprivate(x) firstprivate(x)
295   for (i = 0; i < 16; ++i)
296     ;
297 #pragma omp target parallel for simd lastprivate(x, y) firstprivate(x, y)
298   for (i = 0; i < 16; ++i)
299     ;
300 #pragma omp target parallel for simd lastprivate(x, y, z) firstprivate(x, y, z)
301   for (i = 0; i < 16; ++i)
302     ;
303 }
304 
test_loop_messages()305 void test_loop_messages() {
306   float a[100], b[100], c[100];
307 // expected-error@+2 {{variable must be of integer or pointer type}}
308 #pragma omp target parallel for simd
309   for (float fi = 0; fi < 10.0; fi++) {
310     c[(int)fi] = a[(int)fi] + b[(int)fi];
311   }
312 // expected-error@+2 {{variable must be of integer or pointer type}}
313 #pragma omp target parallel for simd
314   for (double fi = 0; fi < 10.0; fi++) {
315     c[(int)fi] = a[(int)fi] + b[(int)fi];
316   }
317 }
318 
test_safelen()319 void test_safelen() {
320   int i;
321 // expected-error@+1 {{expected '('}}
322 #pragma omp target parallel for simd safelen
323   for (i = 0; i < 16; ++i)
324     ;
325 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
326 #pragma omp target parallel for simd safelen(
327   for (i = 0; i < 16; ++i)
328     ;
329 // expected-error@+1 {{expected expression}}
330 #pragma omp target parallel for simd safelen()
331   for (i = 0; i < 16; ++i)
332     ;
333 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
334 #pragma omp target parallel for simd safelen(,
335   for (i = 0; i < 16; ++i)
336     ;
337 // expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
338 #pragma omp target parallel for simd safelen(, )
339   for (i = 0; i < 16; ++i)
340     ;
341 // expected-warning@+2 {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}}
342 // expected-error@+1 {{expected '('}}
343 #pragma omp target parallel for simd safelen 4)
344   for (i = 0; i < 16; ++i)
345     ;
346 // expected-error@+2 {{expected ')'}}
347 // expected-note@+1 {{to match this '('}}
348 #pragma omp target parallel for simd safelen(4
349   for (i = 0; i < 16; ++i)
350     ;
351 // expected-error@+2 {{expected ')'}}
352 // expected-note@+1 {{to match this '('}}
353 #pragma omp target parallel for simd safelen(4,
354   for (i = 0; i < 16; ++i)
355     ;
356 // expected-error@+2 {{expected ')'}}
357 // expected-note@+1 {{to match this '('}}
358 #pragma omp target parallel for simd safelen(4, )
359   for (i = 0; i < 16; ++i)
360     ;
361 #pragma omp target parallel for simd safelen(4)
362   for (i = 0; i < 16; ++i)
363     ;
364 // expected-error@+2 {{expected ')'}}
365 // expected-note@+1 {{to match this '('}}
366 #pragma omp target parallel for simd safelen(4 4)
367   for (i = 0; i < 16; ++i)
368     ;
369 // expected-error@+2 {{expected ')'}}
370 // expected-note@+1 {{to match this '('}}
371 #pragma omp target parallel for simd safelen(4, , 4)
372   for (i = 0; i < 16; ++i)
373     ;
374 #pragma omp target parallel for simd safelen(4)
375   for (i = 0; i < 16; ++i)
376     ;
377 // expected-error@+2 {{expected ')'}}
378 // expected-note@+1 {{to match this '('}}
379 #pragma omp target parallel for simd safelen(4, 8)
380   for (i = 0; i < 16; ++i)
381     ;
382 // expected-error@+1 {{integer constant expression}}
383 #pragma omp target parallel for simd safelen(2.5)
384   for (i = 0; i < 16; ++i)
385     ;
386 // expected-error@+1 {{integer constant expression}}
387 #pragma omp target parallel for simd safelen(foo())
388   for (i = 0; i < 16; ++i)
389     ;
390 // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
391 #pragma omp target parallel for simd safelen(-5)
392   for (i = 0; i < 16; ++i)
393     ;
394 // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
395 #pragma omp target parallel for simd safelen(0)
396   for (i = 0; i < 16; ++i)
397     ;
398 // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
399 #pragma omp target parallel for simd safelen(5 - 5)
400   for (i = 0; i < 16; ++i)
401     ;
402 }
403 
test_simdlen()404 void test_simdlen() {
405   int i;
406 // expected-error@+1 {{expected '('}}
407 #pragma omp target parallel for simd simdlen
408   for (i = 0; i < 16; ++i)
409     ;
410 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
411 #pragma omp target parallel for simd simdlen(
412   for (i = 0; i < 16; ++i)
413     ;
414 // expected-error@+1 {{expected expression}}
415 #pragma omp target parallel for simd simdlen()
416   for (i = 0; i < 16; ++i)
417     ;
418 // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
419 #pragma omp target parallel for simd simdlen(,
420   for (i = 0; i < 16; ++i)
421     ;
422 // expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
423 #pragma omp target parallel for simd simdlen(, )
424   for (i = 0; i < 16; ++i)
425     ;
426 // expected-warning@+2 {{extra tokens at the end of '#pragma omp target parallel for simd' are ignored}}
427 // expected-error@+1 {{expected '('}}
428 #pragma omp target parallel for simd simdlen 4)
429   for (i = 0; i < 16; ++i)
430     ;
431 // expected-error@+2 {{expected ')'}}
432 // expected-note@+1 {{to match this '('}}
433 #pragma omp target parallel for simd simdlen(4
434   for (i = 0; i < 16; ++i)
435     ;
436 // expected-error@+2 {{expected ')'}}
437 // expected-note@+1 {{to match this '('}}
438 #pragma omp target parallel for simd simdlen(4,
439   for (i = 0; i < 16; ++i)
440     ;
441 // expected-error@+2 {{expected ')'}}
442 // expected-note@+1 {{to match this '('}}
443 #pragma omp target parallel for simd simdlen(4, )
444   for (i = 0; i < 16; ++i)
445     ;
446 #pragma omp target parallel for simd simdlen(4)
447   for (i = 0; i < 16; ++i)
448     ;
449 // expected-error@+2 {{expected ')'}}
450 // expected-note@+1 {{to match this '('}}
451 #pragma omp target parallel for simd simdlen(4 4)
452   for (i = 0; i < 16; ++i)
453     ;
454 // expected-error@+2 {{expected ')'}}
455 // expected-note@+1 {{to match this '('}}
456 #pragma omp target parallel for simd simdlen(4, , 4)
457   for (i = 0; i < 16; ++i)
458     ;
459 #pragma omp target parallel for simd simdlen(4)
460   for (i = 0; i < 16; ++i)
461     ;
462 // expected-error@+2 {{expected ')'}}
463 // expected-note@+1 {{to match this '('}}
464 #pragma omp target parallel for simd simdlen(4, 8)
465   for (i = 0; i < 16; ++i)
466     ;
467 // expected-error@+1 {{integer constant expression}}
468 #pragma omp target parallel for simd simdlen(2.5)
469   for (i = 0; i < 16; ++i)
470     ;
471 // expected-error@+1 {{integer constant expression}}
472 #pragma omp target parallel for simd simdlen(foo())
473   for (i = 0; i < 16; ++i)
474     ;
475 // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
476 #pragma omp target parallel for simd simdlen(-5)
477   for (i = 0; i < 16; ++i)
478     ;
479 // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
480 #pragma omp target parallel for simd simdlen(0)
481   for (i = 0; i < 16; ++i)
482     ;
483 // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
484 #pragma omp target parallel for simd simdlen(5 - 5)
485   for (i = 0; i < 16; ++i)
486     ;
487 }
488 
test_safelen_simdlen()489 void test_safelen_simdlen() {
490   int i;
491 // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}
492 #pragma omp target parallel for simd simdlen(6) safelen(5)
493   for (i = 0; i < 16; ++i)
494     ;
495 // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}
496 #pragma omp target parallel for simd safelen(5) simdlen(6)
497   for (i = 0; i < 16; ++i)
498     ;
499 }
500 
test_nontemporal()501 void test_nontemporal() {
502   int i;
503 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}} expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
504 #pragma omp target parallel for simd nontemporal(
505   for (i = 0; i < 16; ++i)
506     ;
507 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}} expected-error@+1 2 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
508 #pragma omp target parallel for simd nontemporal(,
509   for (i = 0; i < 16; ++i)
510     ;
511 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}} expected-error@+1 2 {{expected expression}}
512 #pragma omp target parallel for simd nontemporal(, )
513   for (i = 0; i < 16; ++i)
514     ;
515 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}} expected-error@+1 {{expected expression}}
516 #pragma omp target parallel for simd nontemporal()
517   for (i = 0; i < 16; ++i)
518     ;
519 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}} expected-error@+1 {{expected expression}}
520 #pragma omp target parallel for simd nontemporal(int)
521   for (i = 0; i < 16; ++i)
522     ;
523 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}} omp50-error@+1 {{expected variable name}}
524 #pragma omp target parallel for simd nontemporal(0)
525   for (i = 0; i < 16; ++i)
526     ;
527 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}} expected-error@+1 {{use of undeclared identifier 'x'}}
528 #pragma omp target parallel for simd nontemporal(x)
529   for (i = 0; i < 16; ++i)
530     ;
531 // expected-error@+2 {{use of undeclared identifier 'x'}}
532 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}} expected-error@+1 {{use of undeclared identifier 'y'}}
533 #pragma omp target parallel for simd nontemporal(x, y)
534   for (i = 0; i < 16; ++i)
535     ;
536 // expected-error@+3 {{use of undeclared identifier 'x'}}
537 // expected-error@+2 {{use of undeclared identifier 'y'}}
538 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}} expected-error@+1 {{use of undeclared identifier 'z'}}
539 #pragma omp target parallel for simd nontemporal(x, y, z)
540   for (i = 0; i < 16; ++i)
541     ;
542 
543   int x, y;
544 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
545 #pragma omp target parallel for simd nontemporal(x :)
546   for (i = 0; i < 16; ++i)
547     ;
548 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}}
549 #pragma omp target parallel for simd nontemporal(x :, )
550   for (i = 0; i < 16; ++i)
551     ;
552 
553 // omp50-note@+2 {{defined as nontemporal}}
554 // omp45-error@+1 2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}} omp50-error@+1 {{a variable cannot appear in more than one nontemporal clause}}
555 #pragma omp target parallel for simd nontemporal(x) nontemporal(x)
556   for (i = 0; i < 16; ++i)
557     ;
558 
559 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}}
560 #pragma omp target parallel for simd private(x) nontemporal(x)
561   for (i = 0; i < 16; ++i)
562     ;
563 
564 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}}
565 #pragma omp target parallel for simd nontemporal(x) private(x)
566   for (i = 0; i < 16; ++i)
567     ;
568 
569 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}} expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}}
570 #pragma omp target parallel for simd nontemporal(x, y : 0)
571   for (i = 0; i < 16; ++i)
572     ;
573 
574 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}}
575 #pragma omp target parallel for simd nontemporal(x) lastprivate(x)
576   for (i = 0; i < 16; ++i)
577     ;
578 
579 // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp target parallel for simd'}}
580 #pragma omp target parallel for simd lastprivate(x) nontemporal(x)
581   for (i = 0; i < 16; ++i)
582     ;
583 }
584 
585