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