Clang Project

clang_source_code/test/OpenMP/parallel_sections_misc_messages.c
1// RUN: %clang_cc1 -fsyntax-only -fopenmp -verify %s
2
3// RUN: %clang_cc1 -fsyntax-only -fopenmp-simd -verify %s
4
5void 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 '('}}
120// expected-error@+1 2 {{expected expression}}
121#pragma omp parallel sections private(,
122  {
123    foo();
124  }
125// expected-error@+1 2 {{expected expression}}
126#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 '('}}
171// expected-error@+1 2 {{expected expression}}
172#pragma omp parallel sections lastprivate(,
173  {
174    foo();
175  }
176// expected-error@+1 2 {{expected expression}}
177#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 '('}}
222// expected-error@+1 2 {{expected expression}}
223#pragma omp parallel sections firstprivate(,
224  {
225    foo();
226  }
227// expected-error@+1 2 {{expected expression}}
228#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
263