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