1 // RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s
3 // RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify %s
7 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp sections'}}
10 // expected-error@+1 {{unexpected OpenMP directive '#pragma omp sections'}}
11 #pragma omp sections foo
13 void test_no_clause() {
20 // expected-error@+2 {{the statement for '#pragma omp sections' must be a compound statement}}
27 foo(); // expected-error {{statement in 'omp sections' directive must be enclosed into a section region}}
31 void test_branch_protected_scope() {
42 goto L1; // expected-error {{use of undeclared label 'L1'}}
44 return; // expected-error {{cannot return from OpenMP region}}
53 goto L1; // expected-error {{use of undeclared label 'L1'}}
55 return; // expected-error {{cannot return from OpenMP region}}
65 goto L2; // expected-error {{use of undeclared label 'L2'}}
68 goto L3; // expected-error {{use of undeclared label 'L3'}}
71 void test_invalid_clause() {
74 // expected-warning@+1 {{extra tokens at the end of '#pragma omp sections' are ignored}}
75 #pragma omp sections foo bar
78 // expected-error@+1 {{unexpected OpenMP clause 'nowait' in directive '#pragma omp section'}}
79 #pragma omp section nowait
84 void test_non_identifiers() {
88 // expected-warning@+1 {{extra tokens at the end of '#pragma omp sections' are ignored}}
94 // expected-error@+2 {{unexpected OpenMP clause 'linear' in directive '#pragma omp sections'}}
95 // expected-warning@+1 {{extra tokens at the end of '#pragma omp sections' are ignored}}
96 #pragma omp sections linear(x);
102 // expected-warning@+1 {{extra tokens at the end of '#pragma omp sections' are ignored}}
103 #pragma omp sections private(x);
109 // expected-warning@+1 {{extra tokens at the end of '#pragma omp sections' are ignored}}
110 #pragma omp sections, private(x);
116 void test_private() {
119 // expected-error@+2 {{expected expression}}
120 // expected-error@+1 {{expected ')'}} expected-note@+1 {{to match this '('}}
121 #pragma omp sections private(
126 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
127 // expected-error@+1 2 {{expected expression}}
128 #pragma omp sections private(,
133 // expected-error@+1 2 {{expected expression}}
134 #pragma omp sections private(, )
139 // expected-error@+1 {{expected expression}}
140 #pragma omp sections private()
145 // expected-error@+1 {{expected expression}}
146 #pragma omp sections private(int)
151 // expected-error@+1 {{expected variable name}}
152 #pragma omp sections private(0)
159 #pragma omp sections private(x)
164 #pragma omp sections private(x, y)
169 #pragma omp sections private(x, y, z)
175 void test_lastprivate() {
178 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
179 // expected-error@+1 {{expected expression}}
180 #pragma omp sections lastprivate(
186 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
187 // expected-error@+1 2 {{expected expression}}
188 #pragma omp sections lastprivate(,
193 // expected-error@+1 2 {{expected expression}}
194 #pragma omp sections lastprivate(, )
199 // expected-error@+1 {{expected expression}}
200 #pragma omp sections lastprivate()
205 // expected-error@+1 {{expected expression}}
206 #pragma omp sections lastprivate(int)
211 // expected-error@+1 {{expected variable name}}
212 #pragma omp sections lastprivate(0)
219 #pragma omp sections lastprivate(x)
224 #pragma omp sections lastprivate(x, y)
229 #pragma omp sections lastprivate(x, y, z)
235 void test_firstprivate() {
238 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
239 // expected-error@+1 {{expected expression}}
240 #pragma omp sections firstprivate(
246 // expected-error@+2 {{expected ')'}} expected-note@+2 {{to match this '('}}
247 // expected-error@+1 2 {{expected expression}}
248 #pragma omp sections firstprivate(,
253 // expected-error@+1 2 {{expected expression}}
254 #pragma omp sections firstprivate(, )
259 // expected-error@+1 {{expected expression}}
260 #pragma omp sections firstprivate()
265 // expected-error@+1 {{expected expression}}
266 #pragma omp sections firstprivate(int)
271 // expected-error@+1 {{expected variable name}}
272 #pragma omp sections firstprivate(0)
279 #pragma omp sections lastprivate(x) firstprivate(x)
284 #pragma omp sections lastprivate(x, y) firstprivate(x, y)
289 #pragma omp sections lastprivate(x, y, z) firstprivate(x, y, z)
297 #pragma omp sections nowait nowait // expected-error {{directive '#pragma omp sections' cannot contain more than one 'nowait' clause}}