1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s
2*67e74705SXin Li
3*67e74705SXin Li // expected-error@+1 {{unexpected OpenMP directive '#pragma omp simd'}}
4*67e74705SXin Li #pragma omp simd
5*67e74705SXin Li
6*67e74705SXin Li // expected-error@+1 {{unexpected OpenMP directive '#pragma omp simd'}}
7*67e74705SXin Li #pragma omp simd foo
8*67e74705SXin Li
9*67e74705SXin Li // expected-error@+1 {{unexpected OpenMP directive '#pragma omp simd'}}
10*67e74705SXin Li #pragma omp simd safelen(4)
11*67e74705SXin Li
test_no_clause()12*67e74705SXin Li void test_no_clause() {
13*67e74705SXin Li int i;
14*67e74705SXin Li #pragma omp simd
15*67e74705SXin Li for (i = 0; i < 16; ++i)
16*67e74705SXin Li ;
17*67e74705SXin Li
18*67e74705SXin Li // expected-error@+2 {{statement after '#pragma omp simd' must be a for loop}}
19*67e74705SXin Li #pragma omp simd
20*67e74705SXin Li ++i;
21*67e74705SXin Li }
22*67e74705SXin Li
test_branch_protected_scope()23*67e74705SXin Li void test_branch_protected_scope() {
24*67e74705SXin Li int i = 0;
25*67e74705SXin Li L1:
26*67e74705SXin Li ++i;
27*67e74705SXin Li
28*67e74705SXin Li int x[24];
29*67e74705SXin Li
30*67e74705SXin Li #pragma omp simd
31*67e74705SXin Li for (i = 0; i < 16; ++i) {
32*67e74705SXin Li if (i == 5)
33*67e74705SXin Li goto L1; // expected-error {{use of undeclared label 'L1'}}
34*67e74705SXin Li else if (i == 6)
35*67e74705SXin Li return; // expected-error {{cannot return from OpenMP region}}
36*67e74705SXin Li else if (i == 7)
37*67e74705SXin Li goto L2;
38*67e74705SXin Li else if (i == 8) {
39*67e74705SXin Li L2:
40*67e74705SXin Li x[i]++;
41*67e74705SXin Li }
42*67e74705SXin Li }
43*67e74705SXin Li
44*67e74705SXin Li if (x[0] == 0)
45*67e74705SXin Li goto L2; // expected-error {{use of undeclared label 'L2'}}
46*67e74705SXin Li else if (x[1] == 1)
47*67e74705SXin Li goto L1;
48*67e74705SXin Li }
49*67e74705SXin Li
test_invalid_clause()50*67e74705SXin Li void test_invalid_clause() {
51*67e74705SXin Li int i;
52*67e74705SXin Li // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}
53*67e74705SXin Li #pragma omp simd foo bar
54*67e74705SXin Li for (i = 0; i < 16; ++i)
55*67e74705SXin Li ;
56*67e74705SXin Li }
57*67e74705SXin Li
test_non_identifiers()58*67e74705SXin Li void test_non_identifiers() {
59*67e74705SXin Li int i, x;
60*67e74705SXin Li
61*67e74705SXin Li // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}
62*67e74705SXin Li #pragma omp simd;
63*67e74705SXin Li for (i = 0; i < 16; ++i)
64*67e74705SXin Li ;
65*67e74705SXin Li // expected-error@+2 {{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp simd'}}
66*67e74705SXin Li // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}
67*67e74705SXin Li #pragma omp simd firstprivate(x);
68*67e74705SXin Li for (i = 0; i < 16; ++i)
69*67e74705SXin Li ;
70*67e74705SXin Li
71*67e74705SXin Li // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}
72*67e74705SXin Li #pragma omp simd private(x);
73*67e74705SXin Li for (i = 0; i < 16; ++i)
74*67e74705SXin Li ;
75*67e74705SXin Li
76*67e74705SXin Li // expected-warning@+1 {{extra tokens at the end of '#pragma omp simd' are ignored}}
77*67e74705SXin Li #pragma omp simd, private(x);
78*67e74705SXin Li for (i = 0; i < 16; ++i)
79*67e74705SXin Li ;
80*67e74705SXin Li }
81*67e74705SXin Li
82*67e74705SXin Li extern int foo();
test_safelen()83*67e74705SXin Li void test_safelen() {
84*67e74705SXin Li int i;
85*67e74705SXin Li // expected-error@+1 {{expected '('}}
86*67e74705SXin Li #pragma omp simd safelen
87*67e74705SXin Li for (i = 0; i < 16; ++i)
88*67e74705SXin Li ;
89*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
90*67e74705SXin Li #pragma omp simd safelen(
91*67e74705SXin Li for (i = 0; i < 16; ++i)
92*67e74705SXin Li ;
93*67e74705SXin Li // expected-error@+1 {{expected expression}}
94*67e74705SXin Li #pragma omp simd safelen()
95*67e74705SXin Li for (i = 0; i < 16; ++i)
96*67e74705SXin Li ;
97*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
98*67e74705SXin Li #pragma omp simd safelen(,
99*67e74705SXin Li for (i = 0; i < 16; ++i)
100*67e74705SXin Li ;
101*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
102*67e74705SXin Li #pragma omp simd safelen(, )
103*67e74705SXin Li for (i = 0; i < 16; ++i)
104*67e74705SXin Li ;
105*67e74705SXin Li // expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}}
106*67e74705SXin Li // expected-error@+1 {{expected '('}}
107*67e74705SXin Li #pragma omp simd safelen 4)
108*67e74705SXin Li for (i = 0; i < 16; ++i)
109*67e74705SXin Li ;
110*67e74705SXin Li // expected-error@+2 {{expected ')'}}
111*67e74705SXin Li // expected-note@+1 {{to match this '('}}
112*67e74705SXin Li #pragma omp simd safelen(4
113*67e74705SXin Li for (i = 0; i < 16; ++i)
114*67e74705SXin Li ;
115*67e74705SXin Li // expected-error@+2 {{expected ')'}}
116*67e74705SXin Li // expected-note@+1 {{to match this '('}}
117*67e74705SXin Li #pragma omp simd safelen(4,
118*67e74705SXin Li for (i = 0; i < 16; ++i)
119*67e74705SXin Li ;
120*67e74705SXin Li // expected-error@+2 {{expected ')'}}
121*67e74705SXin Li // expected-note@+1 {{to match this '('}}
122*67e74705SXin Li #pragma omp simd safelen(4, )
123*67e74705SXin Li for (i = 0; i < 16; ++i)
124*67e74705SXin Li ;
125*67e74705SXin Li // xxpected-error@+1 {{expected expression}}
126*67e74705SXin Li #pragma omp simd safelen(4)
127*67e74705SXin Li for (i = 0; i < 16; ++i)
128*67e74705SXin Li ;
129*67e74705SXin Li // expected-error@+2 {{expected ')'}}
130*67e74705SXin Li // expected-note@+1 {{to match this '('}}
131*67e74705SXin Li #pragma omp simd safelen(4 4)
132*67e74705SXin Li for (i = 0; i < 16; ++i)
133*67e74705SXin Li ;
134*67e74705SXin Li // expected-error@+2 {{expected ')'}}
135*67e74705SXin Li // expected-note@+1 {{to match this '('}}
136*67e74705SXin Li #pragma omp simd safelen(4, , 4)
137*67e74705SXin Li for (i = 0; i < 16; ++i)
138*67e74705SXin Li ;
139*67e74705SXin Li #pragma omp simd safelen(4)
140*67e74705SXin Li for (i = 0; i < 16; ++i)
141*67e74705SXin Li ;
142*67e74705SXin Li // expected-error@+2 {{expected ')'}}
143*67e74705SXin Li // expected-note@+1 {{to match this '('}}
144*67e74705SXin Li #pragma omp simd safelen(4, 8)
145*67e74705SXin Li for (i = 0; i < 16; ++i)
146*67e74705SXin Li ;
147*67e74705SXin Li // expected-error@+1 {{expression is not an integer constant expression}}
148*67e74705SXin Li #pragma omp simd safelen(2.5)
149*67e74705SXin Li for (i = 0; i < 16; ++i)
150*67e74705SXin Li ;
151*67e74705SXin Li // expected-error@+1 {{expression is not an integer constant expression}}
152*67e74705SXin Li #pragma omp simd safelen(foo())
153*67e74705SXin Li for (i = 0; i < 16; ++i)
154*67e74705SXin Li ;
155*67e74705SXin Li // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
156*67e74705SXin Li #pragma omp simd safelen(-5)
157*67e74705SXin Li for (i = 0; i < 16; ++i)
158*67e74705SXin Li ;
159*67e74705SXin Li // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
160*67e74705SXin Li #pragma omp simd safelen(0)
161*67e74705SXin Li for (i = 0; i < 16; ++i)
162*67e74705SXin Li ;
163*67e74705SXin Li // expected-error@+1 {{argument to 'safelen' clause must be a strictly positive integer value}}
164*67e74705SXin Li #pragma omp simd safelen(5 - 5)
165*67e74705SXin Li for (i = 0; i < 16; ++i)
166*67e74705SXin Li ;
167*67e74705SXin Li }
168*67e74705SXin Li
test_simdlen()169*67e74705SXin Li void test_simdlen() {
170*67e74705SXin Li int i;
171*67e74705SXin Li // expected-error@+1 {{expected '('}}
172*67e74705SXin Li #pragma omp simd simdlen
173*67e74705SXin Li for (i = 0; i < 16; ++i)
174*67e74705SXin Li ;
175*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
176*67e74705SXin Li #pragma omp simd simdlen(
177*67e74705SXin Li for (i = 0; i < 16; ++i)
178*67e74705SXin Li ;
179*67e74705SXin Li // expected-error@+1 {{expected expression}}
180*67e74705SXin Li #pragma omp simd simdlen()
181*67e74705SXin Li for (i = 0; i < 16; ++i)
182*67e74705SXin Li ;
183*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
184*67e74705SXin Li #pragma omp simd simdlen(,
185*67e74705SXin Li for (i = 0; i < 16; ++i)
186*67e74705SXin Li ;
187*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
188*67e74705SXin Li #pragma omp simd simdlen(, )
189*67e74705SXin Li for (i = 0; i < 16; ++i)
190*67e74705SXin Li ;
191*67e74705SXin Li // expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}}
192*67e74705SXin Li // expected-error@+1 {{expected '('}}
193*67e74705SXin Li #pragma omp simd simdlen 4)
194*67e74705SXin Li for (i = 0; i < 16; ++i)
195*67e74705SXin Li ;
196*67e74705SXin Li // expected-error@+2 {{expected ')'}}
197*67e74705SXin Li // expected-note@+1 {{to match this '('}}
198*67e74705SXin Li #pragma omp simd simdlen(4
199*67e74705SXin Li for (i = 0; i < 16; ++i)
200*67e74705SXin Li ;
201*67e74705SXin Li // expected-error@+2 {{expected ')'}}
202*67e74705SXin Li // expected-note@+1 {{to match this '('}}
203*67e74705SXin Li #pragma omp simd simdlen(4,
204*67e74705SXin Li for (i = 0; i < 16; ++i)
205*67e74705SXin Li ;
206*67e74705SXin Li // expected-error@+2 {{expected ')'}}
207*67e74705SXin Li // expected-note@+1 {{to match this '('}}
208*67e74705SXin Li #pragma omp simd simdlen(4, )
209*67e74705SXin Li for (i = 0; i < 16; ++i)
210*67e74705SXin Li ;
211*67e74705SXin Li #pragma omp simd simdlen(4)
212*67e74705SXin Li for (i = 0; i < 16; ++i)
213*67e74705SXin Li ;
214*67e74705SXin Li // expected-error@+2 {{expected ')'}}
215*67e74705SXin Li // expected-note@+1 {{to match this '('}}
216*67e74705SXin Li #pragma omp simd simdlen(4 4)
217*67e74705SXin Li for (i = 0; i < 16; ++i)
218*67e74705SXin Li ;
219*67e74705SXin Li // expected-error@+2 {{expected ')'}}
220*67e74705SXin Li // expected-note@+1 {{to match this '('}}
221*67e74705SXin Li #pragma omp simd simdlen(4, , 4)
222*67e74705SXin Li for (i = 0; i < 16; ++i)
223*67e74705SXin Li ;
224*67e74705SXin Li #pragma omp simd simdlen(4)
225*67e74705SXin Li for (i = 0; i < 16; ++i)
226*67e74705SXin Li ;
227*67e74705SXin Li // expected-error@+2 {{expected ')'}}
228*67e74705SXin Li // expected-note@+1 {{to match this '('}}
229*67e74705SXin Li #pragma omp simd simdlen(4, 8)
230*67e74705SXin Li for (i = 0; i < 16; ++i)
231*67e74705SXin Li ;
232*67e74705SXin Li // expected-error@+1 {{expression is not an integer constant expression}}
233*67e74705SXin Li #pragma omp simd simdlen(2.5)
234*67e74705SXin Li for (i = 0; i < 16; ++i)
235*67e74705SXin Li ;
236*67e74705SXin Li // expected-error@+1 {{expression is not an integer constant expression}}
237*67e74705SXin Li #pragma omp simd simdlen(foo())
238*67e74705SXin Li for (i = 0; i < 16; ++i)
239*67e74705SXin Li ;
240*67e74705SXin Li // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
241*67e74705SXin Li #pragma omp simd simdlen(-5)
242*67e74705SXin Li for (i = 0; i < 16; ++i)
243*67e74705SXin Li ;
244*67e74705SXin Li // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
245*67e74705SXin Li #pragma omp simd simdlen(0)
246*67e74705SXin Li for (i = 0; i < 16; ++i)
247*67e74705SXin Li ;
248*67e74705SXin Li // expected-error@+1 {{argument to 'simdlen' clause must be a strictly positive integer value}}
249*67e74705SXin Li #pragma omp simd simdlen(5 - 5)
250*67e74705SXin Li for (i = 0; i < 16; ++i)
251*67e74705SXin Li ;
252*67e74705SXin Li }
253*67e74705SXin Li
test_safelen_simdlen()254*67e74705SXin Li void test_safelen_simdlen() {
255*67e74705SXin Li int i;
256*67e74705SXin Li // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}
257*67e74705SXin Li #pragma omp simd simdlen(6) safelen(5)
258*67e74705SXin Li for (i = 0; i < 16; ++i)
259*67e74705SXin Li ;
260*67e74705SXin Li // expected-error@+1 {{the value of 'simdlen' parameter must be less than or equal to the value of the 'safelen' parameter}}
261*67e74705SXin Li #pragma omp simd safelen(5) simdlen(6)
262*67e74705SXin Li for (i = 0; i < 16; ++i)
263*67e74705SXin Li ;
264*67e74705SXin Li }
265*67e74705SXin Li
test_collapse()266*67e74705SXin Li void test_collapse() {
267*67e74705SXin Li int i;
268*67e74705SXin Li // expected-error@+1 {{expected '('}}
269*67e74705SXin Li #pragma omp simd collapse
270*67e74705SXin Li for (i = 0; i < 16; ++i)
271*67e74705SXin Li ;
272*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
273*67e74705SXin Li #pragma omp simd collapse(
274*67e74705SXin Li for (i = 0; i < 16; ++i)
275*67e74705SXin Li ;
276*67e74705SXin Li // expected-error@+1 {{expected expression}}
277*67e74705SXin Li #pragma omp simd collapse()
278*67e74705SXin Li for (i = 0; i < 16; ++i)
279*67e74705SXin Li ;
280*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
281*67e74705SXin Li #pragma omp simd collapse(,
282*67e74705SXin Li for (i = 0; i < 16; ++i)
283*67e74705SXin Li ;
284*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
285*67e74705SXin Li #pragma omp simd collapse(, )
286*67e74705SXin Li for (i = 0; i < 16; ++i)
287*67e74705SXin Li ;
288*67e74705SXin Li // expected-warning@+2 {{extra tokens at the end of '#pragma omp simd' are ignored}}
289*67e74705SXin Li // expected-error@+1 {{expected '('}}
290*67e74705SXin Li #pragma omp simd collapse 4)
291*67e74705SXin Li for (i = 0; i < 16; ++i)
292*67e74705SXin Li ;
293*67e74705SXin Li // expected-error@+2 {{expected ')'}}
294*67e74705SXin Li // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
295*67e74705SXin Li #pragma omp simd collapse(4
296*67e74705SXin Li for (i = 0; i < 16; ++i)
297*67e74705SXin Li ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}
298*67e74705SXin Li // expected-error@+2 {{expected ')'}}
299*67e74705SXin Li // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
300*67e74705SXin Li #pragma omp simd collapse(4,
301*67e74705SXin Li for (i = 0; i < 16; ++i)
302*67e74705SXin Li ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}
303*67e74705SXin Li // expected-error@+2 {{expected ')'}}
304*67e74705SXin Li // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
305*67e74705SXin Li #pragma omp simd collapse(4, )
306*67e74705SXin Li for (i = 0; i < 16; ++i)
307*67e74705SXin Li ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}
308*67e74705SXin Li // xxpected-error@+1 {{expected expression}} expected-note@+1 {{as specified in 'collapse' clause}}
309*67e74705SXin Li #pragma omp simd collapse(4)
310*67e74705SXin Li for (i = 0; i < 16; ++i)
311*67e74705SXin Li ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}
312*67e74705SXin Li // expected-error@+2 {{expected ')'}}
313*67e74705SXin Li // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
314*67e74705SXin Li #pragma omp simd collapse(4 4)
315*67e74705SXin Li for (i = 0; i < 16; ++i)
316*67e74705SXin Li ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}
317*67e74705SXin Li // expected-error@+2 {{expected ')'}}
318*67e74705SXin Li // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
319*67e74705SXin Li #pragma omp simd collapse(4, , 4)
320*67e74705SXin Li for (i = 0; i < 16; ++i)
321*67e74705SXin Li ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}
322*67e74705SXin Li #pragma omp simd collapse(4)
323*67e74705SXin Li for (int i1 = 0; i1 < 16; ++i1)
324*67e74705SXin Li for (int i2 = 0; i2 < 16; ++i2)
325*67e74705SXin Li for (int i3 = 0; i3 < 16; ++i3)
326*67e74705SXin Li for (int i4 = 0; i4 < 16; ++i4)
327*67e74705SXin Li foo();
328*67e74705SXin Li // expected-error@+2 {{expected ')'}}
329*67e74705SXin Li // expected-note@+1 {{to match this '('}} expected-note@+1 {{as specified in 'collapse' clause}}
330*67e74705SXin Li #pragma omp simd collapse(4, 8)
331*67e74705SXin Li for (i = 0; i < 16; ++i)
332*67e74705SXin Li ; // expected-error {{expected 4 for loops after '#pragma omp simd', but found only 1}}
333*67e74705SXin Li // expected-error@+1 {{expression is not an integer constant expression}}
334*67e74705SXin Li #pragma omp simd collapse(2.5)
335*67e74705SXin Li for (i = 0; i < 16; ++i)
336*67e74705SXin Li ;
337*67e74705SXin Li // expected-error@+1 {{expression is not an integer constant expression}}
338*67e74705SXin Li #pragma omp simd collapse(foo())
339*67e74705SXin Li for (i = 0; i < 16; ++i)
340*67e74705SXin Li ;
341*67e74705SXin Li // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
342*67e74705SXin Li #pragma omp simd collapse(-5)
343*67e74705SXin Li for (i = 0; i < 16; ++i)
344*67e74705SXin Li ;
345*67e74705SXin Li // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
346*67e74705SXin Li #pragma omp simd collapse(0)
347*67e74705SXin Li for (i = 0; i < 16; ++i)
348*67e74705SXin Li ;
349*67e74705SXin Li // expected-error@+1 {{argument to 'collapse' clause must be a strictly positive integer value}}
350*67e74705SXin Li #pragma omp simd collapse(5 - 5)
351*67e74705SXin Li for (i = 0; i < 16; ++i)
352*67e74705SXin Li ;
353*67e74705SXin Li // expected-note@+2 {{defined as reduction}}
354*67e74705SXin Li #pragma omp parallel
355*67e74705SXin Li #pragma omp simd collapse(2) reduction(+ : i)
356*67e74705SXin Li for (i = 0; i < 16; ++i)
357*67e74705SXin Li // 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?}}
358*67e74705SXin Li for (int j = 0; j < 16; ++j)
359*67e74705SXin Li // expected-error@+2 2 {{reduction variable must be shared}}
360*67e74705SXin Li // expected-error@+1 {{OpenMP constructs may not be nested inside a simd region}}
361*67e74705SXin Li #pragma omp for reduction(+ : i, j)
362*67e74705SXin Li for (int k = 0; k < 16; ++k)
363*67e74705SXin Li i += j;
364*67e74705SXin Li #pragma omp parallel
365*67e74705SXin Li #pragma omp for
366*67e74705SXin Li for (i = 0; i < 16; ++i)
367*67e74705SXin Li for (int j = 0; j < 16; ++j)
368*67e74705SXin Li #pragma omp simd reduction(+ : i, j)
369*67e74705SXin Li for (int k = 0; k < 16; ++k)
370*67e74705SXin Li i += j;
371*67e74705SXin Li }
372*67e74705SXin Li
test_linear()373*67e74705SXin Li void test_linear() {
374*67e74705SXin Li int i;
375*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
376*67e74705SXin Li #pragma omp simd linear(
377*67e74705SXin Li for (i = 0; i < 16; ++i)
378*67e74705SXin Li ;
379*67e74705SXin Li // expected-error@+2 {{expected expression}}
380*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
381*67e74705SXin Li #pragma omp simd linear(,
382*67e74705SXin Li for (i = 0; i < 16; ++i)
383*67e74705SXin Li ;
384*67e74705SXin Li // expected-error@+2 {{expected expression}}
385*67e74705SXin Li // expected-error@+1 {{expected expression}}
386*67e74705SXin Li #pragma omp simd linear(, )
387*67e74705SXin Li for (i = 0; i < 16; ++i)
388*67e74705SXin Li ;
389*67e74705SXin Li // expected-error@+1 {{expected expression}}
390*67e74705SXin Li #pragma omp simd linear()
391*67e74705SXin Li for (i = 0; i < 16; ++i)
392*67e74705SXin Li ;
393*67e74705SXin Li // expected-error@+1 {{expected expression}}
394*67e74705SXin Li #pragma omp simd linear(int)
395*67e74705SXin Li for (i = 0; i < 16; ++i)
396*67e74705SXin Li ;
397*67e74705SXin Li // expected-error@+1 {{expected variable name}}
398*67e74705SXin Li #pragma omp simd linear(0)
399*67e74705SXin Li for (i = 0; i < 16; ++i)
400*67e74705SXin Li ;
401*67e74705SXin Li // expected-error@+1 {{use of undeclared identifier 'x'}}
402*67e74705SXin Li #pragma omp simd linear(x)
403*67e74705SXin Li for (i = 0; i < 16; ++i)
404*67e74705SXin Li ;
405*67e74705SXin Li // expected-error@+2 {{use of undeclared identifier 'x'}}
406*67e74705SXin Li // expected-error@+1 {{use of undeclared identifier 'y'}}
407*67e74705SXin Li #pragma omp simd linear(x, y)
408*67e74705SXin Li for (i = 0; i < 16; ++i)
409*67e74705SXin Li ;
410*67e74705SXin Li // expected-error@+3 {{use of undeclared identifier 'x'}}
411*67e74705SXin Li // expected-error@+2 {{use of undeclared identifier 'y'}}
412*67e74705SXin Li // expected-error@+1 {{use of undeclared identifier 'z'}}
413*67e74705SXin Li #pragma omp simd linear(x, y, z)
414*67e74705SXin Li for (i = 0; i < 16; ++i)
415*67e74705SXin Li ;
416*67e74705SXin Li
417*67e74705SXin Li int x, y;
418*67e74705SXin Li // expected-error@+1 {{expected expression}}
419*67e74705SXin Li #pragma omp simd linear(x :)
420*67e74705SXin Li for (i = 0; i < 16; ++i)
421*67e74705SXin Li ;
422*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
423*67e74705SXin Li #pragma omp simd linear(x :, )
424*67e74705SXin Li for (i = 0; i < 16; ++i)
425*67e74705SXin Li ;
426*67e74705SXin Li #pragma omp simd linear(x : 1)
427*67e74705SXin Li for (i = 0; i < 16; ++i)
428*67e74705SXin Li ;
429*67e74705SXin Li #pragma omp simd linear(x : 2 * 2)
430*67e74705SXin Li for (i = 0; i < 16; ++i)
431*67e74705SXin Li ;
432*67e74705SXin Li // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
433*67e74705SXin Li #pragma omp simd linear(x : 1, y)
434*67e74705SXin Li for (i = 0; i < 16; ++i)
435*67e74705SXin Li ;
436*67e74705SXin Li // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
437*67e74705SXin Li #pragma omp simd linear(x : 1, y, z : 1)
438*67e74705SXin Li for (i = 0; i < 16; ++i)
439*67e74705SXin Li ;
440*67e74705SXin Li
441*67e74705SXin Li // expected-note@+2 {{defined as linear}}
442*67e74705SXin Li // expected-error@+1 {{linear variable cannot be linear}}
443*67e74705SXin Li #pragma omp simd linear(x) linear(x)
444*67e74705SXin Li for (i = 0; i < 16; ++i)
445*67e74705SXin Li ;
446*67e74705SXin Li
447*67e74705SXin Li // expected-note@+2 {{defined as private}}
448*67e74705SXin Li // expected-error@+1 {{private variable cannot be linear}}
449*67e74705SXin Li #pragma omp simd private(x) linear(x)
450*67e74705SXin Li for (i = 0; i < 16; ++i)
451*67e74705SXin Li ;
452*67e74705SXin Li
453*67e74705SXin Li // expected-note@+2 {{defined as linear}}
454*67e74705SXin Li // expected-error@+1 {{linear variable cannot be private}}
455*67e74705SXin Li #pragma omp simd linear(x) private(x)
456*67e74705SXin Li for (i = 0; i < 16; ++i)
457*67e74705SXin Li ;
458*67e74705SXin Li
459*67e74705SXin Li // expected-warning@+1 {{zero linear step (x and other variables in clause should probably be const)}}
460*67e74705SXin Li #pragma omp simd linear(x, y : 0)
461*67e74705SXin Li for (i = 0; i < 16; ++i)
462*67e74705SXin Li ;
463*67e74705SXin Li
464*67e74705SXin Li // expected-note@+2 {{defined as linear}}
465*67e74705SXin Li // expected-error@+1 {{linear variable cannot be lastprivate}}
466*67e74705SXin Li #pragma omp simd linear(x) lastprivate(x)
467*67e74705SXin Li for (i = 0; i < 16; ++i)
468*67e74705SXin Li ;
469*67e74705SXin Li
470*67e74705SXin Li // expected-note@+2 {{defined as lastprivate}}
471*67e74705SXin Li // expected-error@+1 {{lastprivate variable cannot be linear}}
472*67e74705SXin Li #pragma omp simd lastprivate(x) linear(x)
473*67e74705SXin Li for (i = 0; i < 16; ++i)
474*67e74705SXin Li ;
475*67e74705SXin Li }
476*67e74705SXin Li
test_aligned()477*67e74705SXin Li void test_aligned() {
478*67e74705SXin Li int i;
479*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
480*67e74705SXin Li #pragma omp simd aligned(
481*67e74705SXin Li for (i = 0; i < 16; ++i)
482*67e74705SXin Li ;
483*67e74705SXin Li // expected-error@+2 {{expected expression}}
484*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
485*67e74705SXin Li #pragma omp simd aligned(,
486*67e74705SXin Li for (i = 0; i < 16; ++i)
487*67e74705SXin Li ;
488*67e74705SXin Li // expected-error@+2 {{expected expression}}
489*67e74705SXin Li // expected-error@+1 {{expected expression}}
490*67e74705SXin Li #pragma omp simd aligned(, )
491*67e74705SXin Li for (i = 0; i < 16; ++i)
492*67e74705SXin Li ;
493*67e74705SXin Li // expected-error@+1 {{expected expression}}
494*67e74705SXin Li #pragma omp simd aligned()
495*67e74705SXin Li for (i = 0; i < 16; ++i)
496*67e74705SXin Li ;
497*67e74705SXin Li // expected-error@+1 {{expected expression}}
498*67e74705SXin Li #pragma omp simd aligned(int)
499*67e74705SXin Li for (i = 0; i < 16; ++i)
500*67e74705SXin Li ;
501*67e74705SXin Li // expected-error@+1 {{expected variable name}}
502*67e74705SXin Li #pragma omp simd aligned(0)
503*67e74705SXin Li for (i = 0; i < 16; ++i)
504*67e74705SXin Li ;
505*67e74705SXin Li // expected-error@+1 {{use of undeclared identifier 'x'}}
506*67e74705SXin Li #pragma omp simd aligned(x)
507*67e74705SXin Li for (i = 0; i < 16; ++i)
508*67e74705SXin Li ;
509*67e74705SXin Li // expected-error@+2 {{use of undeclared identifier 'x'}}
510*67e74705SXin Li // expected-error@+1 {{use of undeclared identifier 'y'}}
511*67e74705SXin Li #pragma omp simd aligned(x, y)
512*67e74705SXin Li for (i = 0; i < 16; ++i)
513*67e74705SXin Li ;
514*67e74705SXin Li // expected-error@+3 {{use of undeclared identifier 'x'}}
515*67e74705SXin Li // expected-error@+2 {{use of undeclared identifier 'y'}}
516*67e74705SXin Li // expected-error@+1 {{use of undeclared identifier 'z'}}
517*67e74705SXin Li #pragma omp simd aligned(x, y, z)
518*67e74705SXin Li for (i = 0; i < 16; ++i)
519*67e74705SXin Li ;
520*67e74705SXin Li
521*67e74705SXin Li int *x, y, z[25]; // expected-note 4 {{'y' defined here}}
522*67e74705SXin Li #pragma omp simd aligned(x)
523*67e74705SXin Li for (i = 0; i < 16; ++i)
524*67e74705SXin Li ;
525*67e74705SXin Li #pragma omp simd aligned(z)
526*67e74705SXin Li for (i = 0; i < 16; ++i)
527*67e74705SXin Li ;
528*67e74705SXin Li // expected-error@+1 {{expected expression}}
529*67e74705SXin Li #pragma omp simd aligned(x :)
530*67e74705SXin Li for (i = 0; i < 16; ++i)
531*67e74705SXin Li ;
532*67e74705SXin Li // expected-error@+1 {{expected expression}} expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
533*67e74705SXin Li #pragma omp simd aligned(x :, )
534*67e74705SXin Li for (i = 0; i < 16; ++i)
535*67e74705SXin Li ;
536*67e74705SXin Li #pragma omp simd aligned(x : 1)
537*67e74705SXin Li for (i = 0; i < 16; ++i)
538*67e74705SXin Li ;
539*67e74705SXin Li #pragma omp simd aligned(x : 2 * 2)
540*67e74705SXin Li for (i = 0; i < 16; ++i)
541*67e74705SXin Li ;
542*67e74705SXin Li // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
543*67e74705SXin Li #pragma omp simd aligned(x : 1, y)
544*67e74705SXin Li for (i = 0; i < 16; ++i)
545*67e74705SXin Li ;
546*67e74705SXin Li // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
547*67e74705SXin Li #pragma omp simd aligned(x : 1, y, z : 1)
548*67e74705SXin Li for (i = 0; i < 16; ++i)
549*67e74705SXin Li ;
550*67e74705SXin Li
551*67e74705SXin Li // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}
552*67e74705SXin Li #pragma omp simd aligned(x, y)
553*67e74705SXin Li for (i = 0; i < 16; ++i)
554*67e74705SXin Li ;
555*67e74705SXin Li // expected-error@+1 {{argument of aligned clause should be array or pointer, not 'int'}}
556*67e74705SXin Li #pragma omp simd aligned(x, y, z)
557*67e74705SXin Li for (i = 0; i < 16; ++i)
558*67e74705SXin Li ;
559*67e74705SXin Li
560*67e74705SXin Li // expected-note@+2 {{defined as aligned}}
561*67e74705SXin Li // expected-error@+1 {{a variable cannot appear in more than one aligned clause}}
562*67e74705SXin Li #pragma omp simd aligned(x) aligned(z, x)
563*67e74705SXin Li for (i = 0; i < 16; ++i)
564*67e74705SXin Li ;
565*67e74705SXin Li
566*67e74705SXin Li // expected-note@+3 {{defined as aligned}}
567*67e74705SXin Li // expected-error@+2 {{a variable cannot appear in more than one aligned clause}}
568*67e74705SXin Li // expected-error@+1 2 {{argument of aligned clause should be array or pointer, not 'int'}}
569*67e74705SXin Li #pragma omp simd aligned(x, y, z) aligned(y, z)
570*67e74705SXin Li for (i = 0; i < 16; ++i)
571*67e74705SXin Li ;
572*67e74705SXin Li }
573*67e74705SXin Li
test_private()574*67e74705SXin Li void test_private() {
575*67e74705SXin Li int i;
576*67e74705SXin Li // expected-error@+2 {{expected expression}}
577*67e74705SXin Li // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
578*67e74705SXin Li #pragma omp simd private(
579*67e74705SXin Li for (i = 0; i < 16; ++i)
580*67e74705SXin Li ;
581*67e74705SXin Li // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
582*67e74705SXin Li // expected-error@+1 2 {{expected expression}}
583*67e74705SXin Li #pragma omp simd private(,
584*67e74705SXin Li for (i = 0; i < 16; ++i)
585*67e74705SXin Li ;
586*67e74705SXin Li // expected-error@+1 2 {{expected expression}}
587*67e74705SXin Li #pragma omp simd private(, )
588*67e74705SXin Li for (i = 0; i < 16; ++i)
589*67e74705SXin Li ;
590*67e74705SXin Li // expected-error@+1 {{expected expression}}
591*67e74705SXin Li #pragma omp simd private()
592*67e74705SXin Li for (i = 0; i < 16; ++i)
593*67e74705SXin Li ;
594*67e74705SXin Li // expected-error@+1 {{expected expression}}
595*67e74705SXin Li #pragma omp simd private(int)
596*67e74705SXin Li for (i = 0; i < 16; ++i)
597*67e74705SXin Li ;
598*67e74705SXin Li // expected-error@+1 {{expected variable name}}
599*67e74705SXin Li #pragma omp simd private(0)
600*67e74705SXin Li for (i = 0; i < 16; ++i)
601*67e74705SXin Li ;
602*67e74705SXin Li
603*67e74705SXin Li int x, y, z;
604*67e74705SXin Li #pragma omp simd private(x)
605*67e74705SXin Li for (i = 0; i < 16; ++i)
606*67e74705SXin Li ;
607*67e74705SXin Li #pragma omp simd private(x, y)
608*67e74705SXin Li for (i = 0; i < 16; ++i)
609*67e74705SXin Li ;
610*67e74705SXin Li #pragma omp simd private(x, y, z)
611*67e74705SXin Li for (i = 0; i < 16; ++i) {
612*67e74705SXin Li x = y * i + z;
613*67e74705SXin Li }
614*67e74705SXin Li }
615*67e74705SXin Li
test_firstprivate()616*67e74705SXin Li void test_firstprivate() {
617*67e74705SXin Li int i;
618*67e74705SXin Li // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
619*67e74705SXin Li // expected-error@+2 {{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp simd'}}
620*67e74705SXin Li // expected-error@+1 {{expected expression}}
621*67e74705SXin Li #pragma omp simd firstprivate(
622*67e74705SXin Li for (i = 0; i < 16; ++i)
623*67e74705SXin Li ;
624*67e74705SXin Li }
625*67e74705SXin Li
test_lastprivate()626*67e74705SXin Li void test_lastprivate() {
627*67e74705SXin Li int i;
628*67e74705SXin Li // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
629*67e74705SXin Li // expected-error@+1 {{expected expression}}
630*67e74705SXin Li #pragma omp simd lastprivate(
631*67e74705SXin Li for (i = 0; i < 16; ++i)
632*67e74705SXin Li ;
633*67e74705SXin Li
634*67e74705SXin Li // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
635*67e74705SXin Li // expected-error@+1 2 {{expected expression}}
636*67e74705SXin Li #pragma omp simd lastprivate(,
637*67e74705SXin Li for (i = 0; i < 16; ++i)
638*67e74705SXin Li ;
639*67e74705SXin Li // expected-error@+1 2 {{expected expression}}
640*67e74705SXin Li #pragma omp simd lastprivate(, )
641*67e74705SXin Li for (i = 0; i < 16; ++i)
642*67e74705SXin Li ;
643*67e74705SXin Li // expected-error@+1 {{expected expression}}
644*67e74705SXin Li #pragma omp simd lastprivate()
645*67e74705SXin Li for (i = 0; i < 16; ++i)
646*67e74705SXin Li ;
647*67e74705SXin Li // expected-error@+1 {{expected expression}}
648*67e74705SXin Li #pragma omp simd lastprivate(int)
649*67e74705SXin Li for (i = 0; i < 16; ++i)
650*67e74705SXin Li ;
651*67e74705SXin Li // expected-error@+1 {{expected variable name}}
652*67e74705SXin Li #pragma omp simd lastprivate(0)
653*67e74705SXin Li for (i = 0; i < 16; ++i)
654*67e74705SXin Li ;
655*67e74705SXin Li
656*67e74705SXin Li int x, y, z;
657*67e74705SXin Li #pragma omp simd lastprivate(x)
658*67e74705SXin Li for (i = 0; i < 16; ++i)
659*67e74705SXin Li ;
660*67e74705SXin Li #pragma omp simd lastprivate(x, y)
661*67e74705SXin Li for (i = 0; i < 16; ++i)
662*67e74705SXin Li ;
663*67e74705SXin Li #pragma omp simd lastprivate(x, y, z)
664*67e74705SXin Li for (i = 0; i < 16; ++i)
665*67e74705SXin Li ;
666*67e74705SXin Li }
667*67e74705SXin Li
test_reduction()668*67e74705SXin Li void test_reduction() {
669*67e74705SXin Li int i, x, y;
670*67e74705SXin Li // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
671*67e74705SXin Li // expected-error@+2 {{expected identifier}}
672*67e74705SXin Li // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
673*67e74705SXin Li #pragma omp simd reduction(
674*67e74705SXin Li for (i = 0; i < 16; ++i)
675*67e74705SXin Li ;
676*67e74705SXin Li // expected-error@+2 {{expected identifier}}
677*67e74705SXin Li // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
678*67e74705SXin Li #pragma omp simd reduction()
679*67e74705SXin Li for (i = 0; i < 16; ++i)
680*67e74705SXin Li ;
681*67e74705SXin Li // expected-error@+2 {{expected expression}}
682*67e74705SXin Li // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
683*67e74705SXin Li #pragma omp simd reduction(x)
684*67e74705SXin Li for (i = 0; i < 16; ++i)
685*67e74705SXin Li ;
686*67e74705SXin Li // expected-error@+1 {{expected identifier}}
687*67e74705SXin Li #pragma omp simd reduction( : x)
688*67e74705SXin Li for (i = 0; i < 16; ++i)
689*67e74705SXin Li ;
690*67e74705SXin Li // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
691*67e74705SXin Li // expected-error@+2 {{expected identifier}}
692*67e74705SXin Li // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
693*67e74705SXin Li #pragma omp simd reduction(,
694*67e74705SXin Li for (i = 0; i < 16; ++i)
695*67e74705SXin Li ;
696*67e74705SXin Li // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
697*67e74705SXin Li // expected-error@+2 {{expected expression}}
698*67e74705SXin Li // expected-warning@+1 {{missing ':' after reduction identifier - ignoring}}
699*67e74705SXin Li #pragma omp simd reduction(+
700*67e74705SXin Li for (i = 0; i < 16; ++i)
701*67e74705SXin Li ;
702*67e74705SXin Li
703*67e74705SXin Li // expected-error@+3 {{expected ')'}} expected-note@+3 {{to match this '('}}
704*67e74705SXin Li //
705*67e74705SXin Li // expected-error@+1 {{expected expression}}
706*67e74705SXin Li #pragma omp simd reduction(+:
707*67e74705SXin Li for (i = 0; i < 16; ++i)
708*67e74705SXin Li ;
709*67e74705SXin Li // expected-error@+1 {{expected expression}}
710*67e74705SXin Li #pragma omp simd reduction(+ :)
711*67e74705SXin Li for (i = 0; i < 16; ++i)
712*67e74705SXin Li ;
713*67e74705SXin Li // expected-error@+1 {{expected expression}}
714*67e74705SXin Li #pragma omp simd reduction(+ :, y)
715*67e74705SXin Li for (i = 0; i < 16; ++i)
716*67e74705SXin Li ;
717*67e74705SXin Li // expected-error@+1 {{expected expression}}
718*67e74705SXin Li #pragma omp simd reduction(+ : x, + : y)
719*67e74705SXin Li for (i = 0; i < 16; ++i)
720*67e74705SXin Li ;
721*67e74705SXin Li // expected-error@+1 {{expected identifier}}
722*67e74705SXin Li #pragma omp simd reduction(% : x)
723*67e74705SXin Li for (i = 0; i < 16; ++i)
724*67e74705SXin Li ;
725*67e74705SXin Li
726*67e74705SXin Li #pragma omp simd reduction(+ : x)
727*67e74705SXin Li for (i = 0; i < 16; ++i)
728*67e74705SXin Li ;
729*67e74705SXin Li #pragma omp simd reduction(* : x)
730*67e74705SXin Li for (i = 0; i < 16; ++i)
731*67e74705SXin Li ;
732*67e74705SXin Li #pragma omp simd reduction(- : x)
733*67e74705SXin Li for (i = 0; i < 16; ++i)
734*67e74705SXin Li ;
735*67e74705SXin Li #pragma omp simd reduction(& : x)
736*67e74705SXin Li for (i = 0; i < 16; ++i)
737*67e74705SXin Li ;
738*67e74705SXin Li #pragma omp simd reduction(| : x)
739*67e74705SXin Li for (i = 0; i < 16; ++i)
740*67e74705SXin Li ;
741*67e74705SXin Li #pragma omp simd reduction(^ : x)
742*67e74705SXin Li for (i = 0; i < 16; ++i)
743*67e74705SXin Li ;
744*67e74705SXin Li #pragma omp simd reduction(&& : x)
745*67e74705SXin Li for (i = 0; i < 16; ++i)
746*67e74705SXin Li ;
747*67e74705SXin Li #pragma omp simd reduction(|| : x)
748*67e74705SXin Li for (i = 0; i < 16; ++i)
749*67e74705SXin Li ;
750*67e74705SXin Li #pragma omp simd reduction(max : x)
751*67e74705SXin Li for (i = 0; i < 16; ++i)
752*67e74705SXin Li ;
753*67e74705SXin Li #pragma omp simd reduction(min : x)
754*67e74705SXin Li for (i = 0; i < 16; ++i)
755*67e74705SXin Li ;
756*67e74705SXin Li struct X {
757*67e74705SXin Li int x;
758*67e74705SXin Li };
759*67e74705SXin Li struct X X;
760*67e74705SXin Li // expected-error@+1 {{expected variable name}}
761*67e74705SXin Li #pragma omp simd reduction(+ : X.x)
762*67e74705SXin Li for (i = 0; i < 16; ++i)
763*67e74705SXin Li ;
764*67e74705SXin Li // expected-error@+1 {{expected variable name}}
765*67e74705SXin Li #pragma omp simd reduction(+ : x + x)
766*67e74705SXin Li for (i = 0; i < 16; ++i)
767*67e74705SXin Li ;
768*67e74705SXin Li }
769*67e74705SXin Li
test_loop_messages()770*67e74705SXin Li void test_loop_messages() {
771*67e74705SXin Li float a[100], b[100], c[100];
772*67e74705SXin Li // expected-error@+2 {{variable must be of integer or pointer type}}
773*67e74705SXin Li #pragma omp simd
774*67e74705SXin Li for (float fi = 0; fi < 10.0; fi++) {
775*67e74705SXin Li c[(int)fi] = a[(int)fi] + b[(int)fi];
776*67e74705SXin Li }
777*67e74705SXin Li // expected-error@+2 {{variable must be of integer or pointer type}}
778*67e74705SXin Li #pragma omp simd
779*67e74705SXin Li for (double fi = 0; fi < 10.0; fi++) {
780*67e74705SXin Li c[(int)fi] = a[(int)fi] + b[(int)fi];
781*67e74705SXin Li }
782*67e74705SXin Li }
783*67e74705SXin Li
linear_modifiers(int argc)784*67e74705SXin Li void linear_modifiers(int argc) {
785*67e74705SXin Li int f;
786*67e74705SXin Li #pragma omp simd linear(f)
787*67e74705SXin Li for (int k = 0; k < argc; ++k) ++k;
788*67e74705SXin Li #pragma omp simd linear(val(f))
789*67e74705SXin Li for (int k = 0; k < argc; ++k) ++k;
790*67e74705SXin Li #pragma omp simd linear(uval(f)) // expected-error {{expected 'val' modifier}}
791*67e74705SXin Li for (int k = 0; k < argc; ++k) ++k;
792*67e74705SXin Li #pragma omp simd linear(ref(f)) // expected-error {{expected 'val' modifier}}
793*67e74705SXin Li for (int k = 0; k < argc; ++k) ++k;
794*67e74705SXin Li #pragma omp simd linear(foo(f)) // expected-error {{expected 'val' modifier}}
795*67e74705SXin Li for (int k = 0; k < argc; ++k) ++k;
796*67e74705SXin Li }
797*67e74705SXin Li
798