1b6e7084eSAlexey Bataev // RUN: %clang_cc1 -fsyntax-only -fopenmp -fopenmp-version=45 -verify=expected,omp45 -triple x86_64-unknown-unknown %s -Wuninitialized
2ff260ad0SSaiyedul Islam // RUN: %clang_cc1 -fsyntax-only -fopenmp -verify=expected,omp50 -triple x86_64-unknown-unknown %s -Wuninitialized
3b8552abfSAlexey Bataev 
4b6e7084eSAlexey Bataev // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -fopenmp-version=45 -verify=expected,omp45 -triple x86_64-unknown-unknown %s -Wuninitialized
5ff260ad0SSaiyedul Islam // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify=expected,omp50 -triple x86_64-unknown-unknown %s -Wuninitialized
6b8552abfSAlexey Bataev 
xxx(int argc)7b8552abfSAlexey Bataev void xxx(int argc) {
8b8552abfSAlexey Bataev   int x; // expected-note {{initialize the variable 'x' to silence this warning}}
9b8552abfSAlexey Bataev #pragma omp master taskloop simd
10b8552abfSAlexey Bataev   for (int i = 0; i < 10; ++i)
11b8552abfSAlexey Bataev     argc = x; // expected-warning {{variable 'x' is uninitialized when used here}}
12b8552abfSAlexey Bataev }
13b8552abfSAlexey Bataev 
14b8552abfSAlexey Bataev // expected-error@+1 {{unexpected OpenMP directive '#pragma omp master taskloop simd'}}
15b8552abfSAlexey Bataev #pragma omp master taskloop simd
16b8552abfSAlexey Bataev 
17b8552abfSAlexey Bataev // expected-error@+1 {{unexpected OpenMP directive '#pragma omp master taskloop simd'}}
18b8552abfSAlexey Bataev #pragma omp master taskloop simd foo
19b8552abfSAlexey Bataev 
test_no_clause(void)20*e9e55acdSAaron Ballman void test_no_clause(void) {
21b8552abfSAlexey Bataev   int i;
22b8552abfSAlexey Bataev #pragma omp master taskloop simd
23b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
24b8552abfSAlexey Bataev     ;
25b8552abfSAlexey Bataev 
26b8552abfSAlexey Bataev // expected-error@+2 {{statement after '#pragma omp master taskloop simd' must be a for loop}}
27b8552abfSAlexey Bataev #pragma omp master taskloop simd
28b8552abfSAlexey Bataev   ++i;
29b8552abfSAlexey Bataev }
30b8552abfSAlexey Bataev 
test_branch_protected_scope(void)31*e9e55acdSAaron Ballman void test_branch_protected_scope(void) {
32b8552abfSAlexey Bataev   int i = 0;
33b8552abfSAlexey Bataev L1:
34b8552abfSAlexey Bataev   ++i;
35b8552abfSAlexey Bataev 
36b8552abfSAlexey Bataev   int x[24];
37b8552abfSAlexey Bataev 
38b8552abfSAlexey Bataev #pragma omp parallel
39b8552abfSAlexey Bataev #pragma omp master taskloop simd
40b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i) {
41b8552abfSAlexey Bataev     if (i == 5)
42b8552abfSAlexey Bataev       goto L1; // expected-error {{use of undeclared label 'L1'}}
43b8552abfSAlexey Bataev     else if (i == 6)
44b8552abfSAlexey Bataev       return; // expected-error {{cannot return from OpenMP region}}
45b8552abfSAlexey Bataev     else if (i == 7)
46b8552abfSAlexey Bataev       goto L2;
47b8552abfSAlexey Bataev     else if (i == 8) {
48b8552abfSAlexey Bataev     L2:
49b8552abfSAlexey Bataev       x[i]++;
50b8552abfSAlexey Bataev     }
51b8552abfSAlexey Bataev   }
52b8552abfSAlexey Bataev 
53b8552abfSAlexey Bataev   if (x[0] == 0)
54b8552abfSAlexey Bataev     goto L2; // expected-error {{use of undeclared label 'L2'}}
55b8552abfSAlexey Bataev   else if (x[1] == 1)
56b8552abfSAlexey Bataev     goto L1;
57b8552abfSAlexey Bataev }
58b8552abfSAlexey Bataev 
test_invalid_clause(void)59*e9e55acdSAaron Ballman void test_invalid_clause(void) {
60b8552abfSAlexey Bataev   int i;
61b8552abfSAlexey Bataev #pragma omp parallel
62b8552abfSAlexey Bataev // expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop simd' are ignored}}
63b8552abfSAlexey Bataev #pragma omp master taskloop simd foo bar
64b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
65b8552abfSAlexey Bataev     ;
66b8552abfSAlexey Bataev // expected-error@+1 {{directive '#pragma omp master taskloop simd' cannot contain more than one 'nogroup' clause}}
67b8552abfSAlexey Bataev #pragma omp master taskloop simd nogroup nogroup
68b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
69b8552abfSAlexey Bataev     ;
70b8552abfSAlexey Bataev }
71b8552abfSAlexey Bataev 
test_non_identifiers(void)72*e9e55acdSAaron Ballman void test_non_identifiers(void) {
73b8552abfSAlexey Bataev   int i, x;
74b8552abfSAlexey Bataev 
75b8552abfSAlexey Bataev #pragma omp parallel
76b8552abfSAlexey Bataev // expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop simd' are ignored}}
77b8552abfSAlexey Bataev #pragma omp master taskloop simd;
78b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
79b8552abfSAlexey Bataev     ;
80b8552abfSAlexey Bataev // expected-warning@+2 {{extra tokens at the end of '#pragma omp master taskloop simd' are ignored}}
81b8552abfSAlexey Bataev #pragma omp parallel
82b8552abfSAlexey Bataev #pragma omp master taskloop simd linear(x);
83b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
84b8552abfSAlexey Bataev     ;
85b8552abfSAlexey Bataev 
86b8552abfSAlexey Bataev #pragma omp parallel
87b8552abfSAlexey Bataev // expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop simd' are ignored}}
88b8552abfSAlexey Bataev #pragma omp master taskloop simd private(x);
89b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
90b8552abfSAlexey Bataev     ;
91b8552abfSAlexey Bataev 
92b8552abfSAlexey Bataev #pragma omp parallel
93b8552abfSAlexey Bataev // expected-warning@+1 {{extra tokens at the end of '#pragma omp master taskloop simd' are ignored}}
94b8552abfSAlexey Bataev #pragma omp master taskloop simd, private(x);
95b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
96b8552abfSAlexey Bataev     ;
97b8552abfSAlexey Bataev }
98b8552abfSAlexey Bataev 
99*e9e55acdSAaron Ballman extern int foo(void);
100b8552abfSAlexey Bataev 
test_collapse(void)101*e9e55acdSAaron Ballman void test_collapse(void) {
102b8552abfSAlexey Bataev   int i;
103b8552abfSAlexey Bataev #pragma omp parallel
104b8552abfSAlexey Bataev // expected-error@+1 {{expected '('}}
105b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse
106b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
107b8552abfSAlexey Bataev     ;
108b8552abfSAlexey Bataev #pragma omp parallel
109b8552abfSAlexey Bataev // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
110b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(
111b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
112b8552abfSAlexey Bataev     ;
113b8552abfSAlexey Bataev #pragma omp parallel
114b8552abfSAlexey Bataev // expected-error@+1 {{expected expression}}
115b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse()
116b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
117b8552abfSAlexey Bataev     ;
118b8552abfSAlexey Bataev #pragma omp parallel
119b8552abfSAlexey Bataev // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
120b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(,
121b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
122b8552abfSAlexey Bataev     ;
123b8552abfSAlexey Bataev #pragma omp parallel
124b8552abfSAlexey Bataev // expected-error@+1 {{expected expression}}  expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
125b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(, )
126b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
127b8552abfSAlexey Bataev     ;
128b8552abfSAlexey Bataev #pragma omp parallel
129b8552abfSAlexey Bataev // expected-warning@+2 {{extra tokens at the end of '#pragma omp master taskloop simd' are ignored}}
130b8552abfSAlexey Bataev // expected-error@+1 {{expected '('}}
131b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse 4)
132b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
133b8552abfSAlexey Bataev     ;
134b8552abfSAlexey Bataev #pragma omp parallel
135b8552abfSAlexey Bataev // expected-error@+2 {{expected ')'}}
136b8552abfSAlexey Bataev // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
137b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(4
138b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
139b8552abfSAlexey Bataev     ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop simd', but found only 1}}
140b8552abfSAlexey Bataev #pragma omp parallel
141b8552abfSAlexey Bataev // expected-error@+2 {{expected ')'}}
142b8552abfSAlexey Bataev // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
143b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(4,
144b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
145b8552abfSAlexey Bataev     ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop simd', but found only 1}}
146b8552abfSAlexey Bataev #pragma omp parallel
147b8552abfSAlexey Bataev // expected-error@+2 {{expected ')'}}
148b8552abfSAlexey Bataev // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
149b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(4, )
150b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
151b8552abfSAlexey Bataev     ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop simd', but found only 1}}
152b8552abfSAlexey Bataev #pragma omp parallel
153b8552abfSAlexey Bataev // expected-note@+1 {{as specified in 'collapse' clause}}
154b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(4)
155b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
156b8552abfSAlexey Bataev     ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop simd', but found only 1}}
157b8552abfSAlexey Bataev #pragma omp parallel
158b8552abfSAlexey Bataev // expected-error@+2 {{expected ')'}}
159b8552abfSAlexey Bataev // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
160b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(4 4)
161b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
162b8552abfSAlexey Bataev     ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop simd', but found only 1}}
163b8552abfSAlexey Bataev #pragma omp parallel
164b8552abfSAlexey Bataev // expected-error@+2 {{expected ')'}}
165b8552abfSAlexey Bataev // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
166b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(4, , 4)
167b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
168b8552abfSAlexey Bataev     ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop simd', but found only 1}}
169b8552abfSAlexey Bataev #pragma omp parallel
170b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(4)
171b8552abfSAlexey Bataev   for (int i1 = 0; i1 < 16; ++i1)
172b8552abfSAlexey Bataev     for (int i2 = 0; i2 < 16; ++i2)
173b8552abfSAlexey Bataev       for (int i3 = 0; i3 < 16; ++i3)
174b8552abfSAlexey Bataev         for (int i4 = 0; i4 < 16; ++i4)
175b8552abfSAlexey Bataev           foo();
176b8552abfSAlexey Bataev #pragma omp parallel
177b8552abfSAlexey Bataev // expected-error@+2 {{expected ')'}}
178b8552abfSAlexey Bataev // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
179b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(4, 8)
180b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
181b8552abfSAlexey Bataev     ; // expected-error {{expected 4 for loops after '#pragma omp master taskloop simd', but found only 1}}
182b8552abfSAlexey Bataev #pragma omp parallel
1836f339367SRichard Smith // expected-error@+1 {{integer constant expression}}
184b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(2.5)
185b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
186b8552abfSAlexey Bataev     ;
187b8552abfSAlexey Bataev #pragma omp parallel
1886f339367SRichard Smith // expected-error@+1 {{integer constant expression}}
189b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(foo())
190b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
191b8552abfSAlexey Bataev     ;
192b8552abfSAlexey Bataev #pragma omp parallel
193b8552abfSAlexey Bataev // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
194b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(-5)
195b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
196b8552abfSAlexey Bataev     ;
197b8552abfSAlexey Bataev #pragma omp parallel
198b8552abfSAlexey Bataev // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
199b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(0)
200b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
201b8552abfSAlexey Bataev     ;
202b8552abfSAlexey Bataev #pragma omp parallel
203b8552abfSAlexey Bataev // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
204b8552abfSAlexey Bataev #pragma omp master taskloop simd collapse(5 - 5)
205b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
206b8552abfSAlexey Bataev     ;
207b8552abfSAlexey Bataev }
208b8552abfSAlexey Bataev 
test_private(void)209*e9e55acdSAaron Ballman void test_private(void) {
210b8552abfSAlexey Bataev   int i;
211b8552abfSAlexey Bataev #pragma omp parallel
212b8552abfSAlexey Bataev // expected-error@+2 {{expected expression}}
213b8552abfSAlexey Bataev // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
214b8552abfSAlexey Bataev #pragma omp master taskloop simd private(
215b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
216b8552abfSAlexey Bataev     ;
217b8552abfSAlexey Bataev #pragma omp parallel
218b8552abfSAlexey Bataev // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
219b8552abfSAlexey Bataev // expected-error@+1 2 {{expected expression}}
220b8552abfSAlexey Bataev #pragma omp master taskloop simd private(,
221b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
222b8552abfSAlexey Bataev     ;
223b8552abfSAlexey Bataev #pragma omp parallel
224b8552abfSAlexey Bataev // expected-error@+1 2 {{expected expression}}
225b8552abfSAlexey Bataev #pragma omp master taskloop simd private(, )
226b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
227b8552abfSAlexey Bataev     ;
228b8552abfSAlexey Bataev #pragma omp parallel
229b8552abfSAlexey Bataev // expected-error@+1 {{expected expression}}
230b8552abfSAlexey Bataev #pragma omp master taskloop simd private()
231b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
232b8552abfSAlexey Bataev     ;
233b8552abfSAlexey Bataev #pragma omp parallel
234b8552abfSAlexey Bataev // expected-error@+1 {{expected expression}}
235b8552abfSAlexey Bataev #pragma omp master taskloop simd private(int)
236b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
237b8552abfSAlexey Bataev     ;
238b8552abfSAlexey Bataev #pragma omp parallel
239b8552abfSAlexey Bataev // expected-error@+1 {{expected variable name}}
240b8552abfSAlexey Bataev #pragma omp master taskloop simd private(0)
241b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
242b8552abfSAlexey Bataev     ;
243b8552abfSAlexey Bataev 
244b8552abfSAlexey Bataev   int x, y, z;
245b8552abfSAlexey Bataev #pragma omp parallel
246b8552abfSAlexey Bataev #pragma omp master taskloop simd private(x)
247b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
248b8552abfSAlexey Bataev     ;
249b8552abfSAlexey Bataev #pragma omp parallel
250b8552abfSAlexey Bataev #pragma omp master taskloop simd private(x, y)
251b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
252b8552abfSAlexey Bataev     ;
253b8552abfSAlexey Bataev #pragma omp parallel
254b8552abfSAlexey Bataev #pragma omp master taskloop simd private(x, y, z)
255b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i) {
256b8552abfSAlexey Bataev     x = y * i + z;
257b8552abfSAlexey Bataev   }
258b8552abfSAlexey Bataev }
259b8552abfSAlexey Bataev 
test_lastprivate(void)260*e9e55acdSAaron Ballman void test_lastprivate(void) {
261b8552abfSAlexey Bataev   int i;
262b8552abfSAlexey Bataev #pragma omp parallel
263b8552abfSAlexey Bataev // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
264b8552abfSAlexey Bataev // expected-error@+1 {{expected expression}}
265b8552abfSAlexey Bataev #pragma omp master taskloop simd lastprivate(
266b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
267b8552abfSAlexey Bataev     ;
268b8552abfSAlexey Bataev 
269b8552abfSAlexey Bataev #pragma omp parallel
270b8552abfSAlexey Bataev // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
271b8552abfSAlexey Bataev // expected-error@+1 2 {{expected expression}}
272b8552abfSAlexey Bataev #pragma omp master taskloop simd lastprivate(,
273b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
274b8552abfSAlexey Bataev     ;
275b8552abfSAlexey Bataev #pragma omp parallel
276b8552abfSAlexey Bataev // expected-error@+1 2 {{expected expression}}
277b8552abfSAlexey Bataev #pragma omp master taskloop simd lastprivate(, )
278b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
279b8552abfSAlexey Bataev     ;
280b8552abfSAlexey Bataev #pragma omp parallel
281b8552abfSAlexey Bataev // expected-error@+1 {{expected expression}}
282b8552abfSAlexey Bataev #pragma omp master taskloop simd lastprivate()
283b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
284b8552abfSAlexey Bataev     ;
285b8552abfSAlexey Bataev #pragma omp parallel
286b8552abfSAlexey Bataev // expected-error@+1 {{expected expression}}
287b8552abfSAlexey Bataev #pragma omp master taskloop simd lastprivate(int)
288b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
289b8552abfSAlexey Bataev     ;
290b8552abfSAlexey Bataev #pragma omp parallel
291b8552abfSAlexey Bataev // expected-error@+1 {{expected variable name}}
292b8552abfSAlexey Bataev #pragma omp master taskloop simd lastprivate(0)
293b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
294b8552abfSAlexey Bataev     ;
295b8552abfSAlexey Bataev 
296b8552abfSAlexey Bataev   int x, y, z;
297b8552abfSAlexey Bataev #pragma omp parallel
298b8552abfSAlexey Bataev #pragma omp master taskloop simd lastprivate(x)
299b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
300b8552abfSAlexey Bataev     ;
301b8552abfSAlexey Bataev #pragma omp parallel
302b8552abfSAlexey Bataev #pragma omp master taskloop simd lastprivate(x, y)
303b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
304b8552abfSAlexey Bataev     ;
305b8552abfSAlexey Bataev #pragma omp parallel
306b8552abfSAlexey Bataev #pragma omp master taskloop simd lastprivate(x, y, z)
307b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
308b8552abfSAlexey Bataev     ;
309b8552abfSAlexey Bataev }
310b8552abfSAlexey Bataev 
test_firstprivate(void)311*e9e55acdSAaron Ballman void test_firstprivate(void) {
312b8552abfSAlexey Bataev   int i;
313b8552abfSAlexey Bataev #pragma omp parallel
314b8552abfSAlexey Bataev // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
315b8552abfSAlexey Bataev // expected-error@+1 {{expected expression}}
316b8552abfSAlexey Bataev #pragma omp master taskloop simd firstprivate(
317b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
318b8552abfSAlexey Bataev     ;
319b8552abfSAlexey Bataev 
320b8552abfSAlexey Bataev #pragma omp parallel
321b8552abfSAlexey Bataev // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
322b8552abfSAlexey Bataev // expected-error@+1 2 {{expected expression}}
323b8552abfSAlexey Bataev #pragma omp master taskloop simd firstprivate(,
324b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
325b8552abfSAlexey Bataev     ;
326b8552abfSAlexey Bataev #pragma omp parallel
327b8552abfSAlexey Bataev // expected-error@+1 2 {{expected expression}}
328b8552abfSAlexey Bataev #pragma omp master taskloop simd firstprivate(, )
329b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
330b8552abfSAlexey Bataev     ;
331b8552abfSAlexey Bataev #pragma omp parallel
332b8552abfSAlexey Bataev // expected-error@+1 {{expected expression}}
333b8552abfSAlexey Bataev #pragma omp master taskloop simd firstprivate()
334b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
335b8552abfSAlexey Bataev     ;
336b8552abfSAlexey Bataev #pragma omp parallel
337b8552abfSAlexey Bataev // expected-error@+1 {{expected expression}}
338b8552abfSAlexey Bataev #pragma omp master taskloop simd firstprivate(int)
339b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
340b8552abfSAlexey Bataev     ;
341b8552abfSAlexey Bataev #pragma omp parallel
342b8552abfSAlexey Bataev // expected-error@+1 {{expected variable name}}
343b8552abfSAlexey Bataev #pragma omp master taskloop simd firstprivate(0)
344b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
345b8552abfSAlexey Bataev     ;
346b8552abfSAlexey Bataev 
347b8552abfSAlexey Bataev   int x, y, z;
348b8552abfSAlexey Bataev #pragma omp parallel
349b8552abfSAlexey Bataev #pragma omp master taskloop simd lastprivate(x) firstprivate(x)
350b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
351b8552abfSAlexey Bataev     ;
352b8552abfSAlexey Bataev #pragma omp parallel
353b8552abfSAlexey Bataev #pragma omp master taskloop simd lastprivate(x, y) firstprivate(x, y)
354b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
355b8552abfSAlexey Bataev     ;
356b8552abfSAlexey Bataev #pragma omp parallel
357b8552abfSAlexey Bataev #pragma omp master taskloop simd lastprivate(x, y, z) firstprivate(x, y, z)
358b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
359b8552abfSAlexey Bataev     ;
360b8552abfSAlexey Bataev // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}
361b8552abfSAlexey Bataev #pragma omp master taskloop simd simdlen(64) safelen(8)
362b8552abfSAlexey Bataev   for (i = 0; i < 16; ++i)
363b8552abfSAlexey Bataev     ;
364b8552abfSAlexey Bataev }
365b8552abfSAlexey Bataev 
test_loop_messages(void)366*e9e55acdSAaron Ballman void test_loop_messages(void) {
367b8552abfSAlexey Bataev   float a[100], b[100], c[100];
368b8552abfSAlexey Bataev #pragma omp parallel
369b8552abfSAlexey Bataev // expected-error@+2 {{variable must be of integer or pointer type}}
370b8552abfSAlexey Bataev #pragma omp master taskloop simd
371b8552abfSAlexey Bataev   for (float fi = 0; fi < 10.0; fi++) {
372b8552abfSAlexey Bataev     c[(int)fi] = a[(int)fi] + b[(int)fi];
373b8552abfSAlexey Bataev   }
374b8552abfSAlexey Bataev #pragma omp parallel
375b8552abfSAlexey Bataev // expected-error@+2 {{variable must be of integer or pointer type}}
376b8552abfSAlexey Bataev #pragma omp master taskloop simd
377b8552abfSAlexey Bataev   for (double fi = 0; fi < 10.0; fi++) {
378b8552abfSAlexey Bataev     c[(int)fi] = a[(int)fi] + b[(int)fi];
379b8552abfSAlexey Bataev   }
380b8552abfSAlexey Bataev 
381b8552abfSAlexey Bataev   // expected-warning@+2 {{OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed}}
382b8552abfSAlexey Bataev   #pragma omp master taskloop simd
383b8552abfSAlexey Bataev   for (__int128 ii = 0; ii < 10; ii++) {
384b8552abfSAlexey Bataev     c[ii] = a[ii] + b[ii];
385b8552abfSAlexey Bataev   }
386b8552abfSAlexey Bataev }
387b8552abfSAlexey Bataev 
test_nontemporal(void)388*e9e55acdSAaron Ballman void test_nontemporal(void) {
389b6e7084eSAlexey Bataev   int i;
390b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
391b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal(
392b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
393b6e7084eSAlexey Bataev     ;
394b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 2 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
395b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal(,
396b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
397b6e7084eSAlexey Bataev     ;
398b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 2 {{expected expression}}
399b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal(, )
400b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
401b6e7084eSAlexey Bataev     ;
402b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{expected expression}}
403b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal()
404b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
405b6e7084eSAlexey Bataev     ;
406b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{expected expression}}
407b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal(int)
408b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
409b6e7084eSAlexey Bataev     ;
410b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} omp50-error@+1 {{expected variable name}}
411b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal(0)
412b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
413b6e7084eSAlexey Bataev     ;
414b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{use of undeclared identifier 'x'}}
415b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal(x)
416b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
417b6e7084eSAlexey Bataev     ;
418b6e7084eSAlexey Bataev // expected-error@+2 {{use of undeclared identifier 'x'}}
419b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{use of undeclared identifier 'y'}}
420b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal(x, y)
421b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
422b6e7084eSAlexey Bataev     ;
423b6e7084eSAlexey Bataev // expected-error@+3 {{use of undeclared identifier 'x'}}
424b6e7084eSAlexey Bataev // expected-error@+2 {{use of undeclared identifier 'y'}}
425b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{use of undeclared identifier 'z'}}
426b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal(x, y, z)
427b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
428b6e7084eSAlexey Bataev     ;
429b6e7084eSAlexey Bataev 
430b6e7084eSAlexey Bataev   int x, y;
431b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
432b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal(x :)
433b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
434b6e7084eSAlexey Bataev     ;
435b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}}
436b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal(x :, )
437b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
438b6e7084eSAlexey Bataev     ;
439b6e7084eSAlexey Bataev 
440b6e7084eSAlexey Bataev // omp50-note@+2 {{defined as nontemporal}}
441b6e7084eSAlexey Bataev // omp45-error@+1 2 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} omp50-error@+1 {{a variable cannot appear in more than one nontemporal clause}}
442b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal(x) nontemporal(x)
443b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
444b6e7084eSAlexey Bataev     ;
445b6e7084eSAlexey Bataev 
446b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}}
447b6e7084eSAlexey Bataev #pragma omp master taskloop simd private(x) nontemporal(x)
448b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
449b6e7084eSAlexey Bataev     ;
450b6e7084eSAlexey Bataev 
451b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}}
452b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal(x) private(x)
453b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
454b6e7084eSAlexey Bataev     ;
455b6e7084eSAlexey Bataev 
456b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}} expected-note@+1 {{to match this '('}} expected-error@+1 {{expected ',' or ')' in 'nontemporal' clause}} expected-error@+1 {{expected ')'}}
457b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal(x, y : 0)
458b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
459b6e7084eSAlexey Bataev     ;
460b6e7084eSAlexey Bataev 
461b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}}
462b6e7084eSAlexey Bataev #pragma omp master taskloop simd nontemporal(x) lastprivate(x)
463b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
464b6e7084eSAlexey Bataev     ;
465b6e7084eSAlexey Bataev 
466b6e7084eSAlexey Bataev // omp45-error@+1 {{unexpected OpenMP clause 'nontemporal' in directive '#pragma omp master taskloop simd'}}
467b6e7084eSAlexey Bataev #pragma omp master taskloop simd lastprivate(x) nontemporal(x)
468b6e7084eSAlexey Bataev   for (i = 0; i < 16; ++i)
469b6e7084eSAlexey Bataev     ;
470b6e7084eSAlexey Bataev }
471b6e7084eSAlexey Bataev 
472