blob: 780837a15f9c714eb2c437f25563acb7c3df13be [file] [log] [blame]
Alexey Bataevdb390212015-05-20 04:24:19 +00001// RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s
Alexey Bataev84d0b3e2014-07-08 08:12:03 +00002
Alexey Bataeva8a9153a2017-12-29 18:07:07 +00003// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify %s
4
Alexey Bataev84d0b3e2014-07-08 08:12:03 +00005void foo();
6
7// expected-error@+1 {{unexpected OpenMP directive '#pragma omp parallel sections'}}
8#pragma omp parallel sections
9
10// expected-error@+1 {{unexpected OpenMP directive '#pragma omp parallel sections'}}
11#pragma omp parallel sections foo
12
13void test_no_clause() {
14 int i;
15#pragma omp parallel sections
16 {
17 foo();
18 }
19
20// expected-error@+2 {{the statement for '#pragma omp parallel sections' must be a compound statement}}
21#pragma omp parallel sections
22 ++i;
23
24#pragma omp parallel sections
25 {
26 foo();
27 foo(); // expected-error {{statement in 'omp parallel sections' directive must be enclosed into a section region}}
28 }
29
30}
31
32void test_branch_protected_scope() {
33 int i = 0;
34L1:
35 ++i;
36
37 int x[24];
38
39#pragma omp parallel sections
40 {
41 if (i == 5)
42 goto L1; // expected-error {{use of undeclared label 'L1'}}
43 else if (i == 6)
44 return; // expected-error {{cannot return from OpenMP region}}
45 else if (i == 7)
46 goto L2;
47 else if (i == 8) {
48 L2:
49 x[i]++;
50 }
51#pragma omp section
52 if (i == 5)
53 goto L1; // expected-error {{use of undeclared label 'L1'}}
54 else if (i == 6)
55 return; // expected-error {{cannot return from OpenMP region}}
56 else if (i == 7)
57 goto L3;
58 else if (i == 8) {
59 L3:
60 x[i]++;
61 }
62 }
63
64 if (x[0] == 0)
65 goto L2; // expected-error {{use of undeclared label 'L2'}}
66 else if (x[1] == 1)
67 goto L1;
68 goto L3; // expected-error {{use of undeclared label 'L3'}}
69}
70
71void test_invalid_clause() {
72 int i;
73// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
74#pragma omp parallel sections foo bar
75 {
76 foo();
77// expected-error@+1 {{unexpected OpenMP clause 'nowait' in directive '#pragma omp section'}}
78#pragma omp section nowait
79 ;
80 }
81}
82
83void test_non_identifiers() {
84 int i, x;
85
86// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
87#pragma omp parallel sections;
88 {
89 foo();
90 }
91// expected-error@+2 {{unexpected OpenMP clause 'linear' in directive '#pragma omp parallel sections'}}
92// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
93#pragma omp parallel sections linear(x);
94 {
95 foo();
96 }
97
98// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
99#pragma omp parallel sections private(x);
100 {
101 foo();
102 }
103
104// expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel sections' are ignored}}
105#pragma omp parallel sections, private(x);
106 {
107 foo();
108 }
109}
110
111void test_private() {
112 int i;
113// expected-error@+2 {{expected expression}}
114// expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
115#pragma omp parallel sections private(
116 {
117 foo();
118 }
119// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
Alexey Bataevc5970622016-04-01 08:43:42 +0000120// expected-error@+1 2 {{expected expression}}
Alexey Bataev84d0b3e2014-07-08 08:12:03 +0000121#pragma omp parallel sections private(,
122 {
123 foo();
124 }
Alexey Bataevc5970622016-04-01 08:43:42 +0000125// expected-error@+1 2 {{expected expression}}
Alexey Bataev84d0b3e2014-07-08 08:12:03 +0000126#pragma omp parallel sections private(, )
127 {
128 foo();
129 }
130// expected-error@+1 {{expected expression}}
131#pragma omp parallel sections private()
132 {
133 foo();
134 }
135// expected-error@+1 {{expected expression}}
136#pragma omp parallel sections private(int)
137 {
138 foo();
139 }
140// expected-error@+1 {{expected variable name}}
141#pragma omp parallel sections private(0)
142 {
143 foo();
144 }
145
146 int x, y, z;
147#pragma omp parallel sections private(x)
148 {
149 foo();
150 }
151#pragma omp parallel sections private(x, y)
152 {
153 foo();
154 }
155#pragma omp parallel sections private(x, y, z)
156 {
157 foo();
158 }
159}
160
161void test_lastprivate() {
162 int i;
163// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
164// expected-error@+1 {{expected expression}}
165#pragma omp parallel sections lastprivate(
166 {
167 foo();
168 }
169
170// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
Alexey Bataevc5970622016-04-01 08:43:42 +0000171// expected-error@+1 2 {{expected expression}}
Alexey Bataev84d0b3e2014-07-08 08:12:03 +0000172#pragma omp parallel sections lastprivate(,
173 {
174 foo();
175 }
Alexey Bataevc5970622016-04-01 08:43:42 +0000176// expected-error@+1 2 {{expected expression}}
Alexey Bataev84d0b3e2014-07-08 08:12:03 +0000177#pragma omp parallel sections lastprivate(, )
178 {
179 foo();
180 }
181// expected-error@+1 {{expected expression}}
182#pragma omp parallel sections lastprivate()
183 {
184 foo();
185 }
186// expected-error@+1 {{expected expression}}
187#pragma omp parallel sections lastprivate(int)
188 {
189 foo();
190 }
191// expected-error@+1 {{expected variable name}}
192#pragma omp parallel sections lastprivate(0)
193 {
194 foo();
195 }
196
197 int x, y, z;
198#pragma omp parallel sections lastprivate(x)
199 {
200 foo();
201 }
202#pragma omp parallel sections lastprivate(x, y)
203 {
204 foo();
205 }
206#pragma omp parallel sections lastprivate(x, y, z)
207 {
208 foo();
209 }
210}
211
212void test_firstprivate() {
213 int i;
214// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
215// expected-error@+1 {{expected expression}}
216#pragma omp parallel sections firstprivate(
217 {
218 foo();
219 }
220
221// expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
Alexey Bataevc5970622016-04-01 08:43:42 +0000222// expected-error@+1 2 {{expected expression}}
Alexey Bataev84d0b3e2014-07-08 08:12:03 +0000223#pragma omp parallel sections firstprivate(,
224 {
225 foo();
226 }
Alexey Bataevc5970622016-04-01 08:43:42 +0000227// expected-error@+1 2 {{expected expression}}
Alexey Bataev84d0b3e2014-07-08 08:12:03 +0000228#pragma omp parallel sections firstprivate(, )
229 {
230 foo();
231 }
232// expected-error@+1 {{expected expression}}
233#pragma omp parallel sections firstprivate()
234 {
235 foo();
236 }
237// expected-error@+1 {{expected expression}}
238#pragma omp parallel sections firstprivate(int)
239 {
240 foo();
241 }
242// expected-error@+1 {{expected variable name}}
243#pragma omp parallel sections firstprivate(0)
244 {
245 foo();
246 }
247
248 int x, y, z;
249#pragma omp parallel sections lastprivate(x) firstprivate(x)
250 {
251 foo();
252 }
253#pragma omp parallel sections lastprivate(x, y) firstprivate(x, y)
254 {
255 foo();
256 }
257#pragma omp parallel sections lastprivate(x, y, z) firstprivate(x, y, z)
258 {
259 foo();
260 }
261}
262