xref: /aosp_15_r20/external/clang/test/OpenMP/ordered_messages.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -o - %s
2*67e74705SXin Li 
3*67e74705SXin Li int foo();
4*67e74705SXin Li 
5*67e74705SXin Li template <class T>
foo()6*67e74705SXin Li T foo() {
7*67e74705SXin Li  T k;
8*67e74705SXin Li   #pragma omp for ordered
9*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
10*67e74705SXin Li     L1:
11*67e74705SXin Li       foo();
12*67e74705SXin Li     #pragma omp ordered
13*67e74705SXin Li     {
14*67e74705SXin Li       foo();
15*67e74705SXin Li       goto L1; // expected-error {{use of undeclared label 'L1'}}
16*67e74705SXin Li     }
17*67e74705SXin Li   }
18*67e74705SXin Li   #pragma omp for ordered
19*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
20*67e74705SXin Li     foo();
21*67e74705SXin Li     goto L2; // expected-error {{use of undeclared label 'L2'}}
22*67e74705SXin Li     #pragma omp ordered
23*67e74705SXin Li     {
24*67e74705SXin Li       L2:
25*67e74705SXin Li       foo();
26*67e74705SXin Li     }
27*67e74705SXin Li   }
28*67e74705SXin Li   #pragma omp for ordered
29*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
30*67e74705SXin Li     #pragma omp ordered threads threads // expected-error {{directive '#pragma omp ordered' cannot contain more than one 'threads' clause}}
31*67e74705SXin Li     {
32*67e74705SXin Li       foo();
33*67e74705SXin Li     }
34*67e74705SXin Li   }
35*67e74705SXin Li   #pragma omp for ordered(1) // expected-note {{'ordered' clause with specified parameter}}
36*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
37*67e74705SXin Li     #pragma omp ordered // expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
38*67e74705SXin Li     {
39*67e74705SXin Li       foo();
40*67e74705SXin Li     }
41*67e74705SXin Li   }
42*67e74705SXin Li   #pragma omp for ordered(1) // expected-note {{'ordered' clause with specified parameter}}
43*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
44*67e74705SXin Li     #pragma omp ordered threads // expected-error {{'ordered' directive with 'threads' clause cannot be closely nested inside ordered region with specified parameter}}
45*67e74705SXin Li     {
46*67e74705SXin Li       foo();
47*67e74705SXin Li     }
48*67e74705SXin Li   }
49*67e74705SXin Li   #pragma omp ordered simd simd // expected-error {{directive '#pragma omp ordered' cannot contain more than one 'simd' clause}}
50*67e74705SXin Li   {
51*67e74705SXin Li     foo();
52*67e74705SXin Li   }
53*67e74705SXin Li   #pragma omp simd
54*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
55*67e74705SXin Li     #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
56*67e74705SXin Li     {
57*67e74705SXin Li       foo();
58*67e74705SXin Li     }
59*67e74705SXin Li   }
60*67e74705SXin Li   #pragma omp simd
61*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
62*67e74705SXin Li     #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
63*67e74705SXin Li     {
64*67e74705SXin Li       foo();
65*67e74705SXin Li     }
66*67e74705SXin Li   }
67*67e74705SXin Li   #pragma omp for simd
68*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
69*67e74705SXin Li     #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
70*67e74705SXin Li     {
71*67e74705SXin Li       foo();
72*67e74705SXin Li     }
73*67e74705SXin Li   }
74*67e74705SXin Li   #pragma omp for simd
75*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
76*67e74705SXin Li     #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
77*67e74705SXin Li     {
78*67e74705SXin Li       foo();
79*67e74705SXin Li     }
80*67e74705SXin Li   }
81*67e74705SXin Li   #pragma omp parallel for simd
82*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
83*67e74705SXin Li     #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
84*67e74705SXin Li     {
85*67e74705SXin Li       foo();
86*67e74705SXin Li     }
87*67e74705SXin Li   }
88*67e74705SXin Li   #pragma omp parallel for simd
89*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
90*67e74705SXin Li     #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
91*67e74705SXin Li     {
92*67e74705SXin Li       foo();
93*67e74705SXin Li     }
94*67e74705SXin Li     #pragma omp ordered depend(source) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
95*67e74705SXin Li   }
96*67e74705SXin Li #pragma omp parallel for ordered
97*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
98*67e74705SXin Li     #pragma omp ordered depend(source) // expected-error {{'ordered' directive with 'depend' clause cannot be closely nested inside ordered region without specified parameter}}
99*67e74705SXin Li     #pragma omp ordered depend(sink : i) // expected-error {{'ordered' directive with 'depend' clause cannot be closely nested inside ordered region without specified parameter}}
100*67e74705SXin Li   }
101*67e74705SXin Li #pragma omp parallel for ordered(2) // expected-note 5 {{'ordered' clause with specified parameter}}
102*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
103*67e74705SXin Li     for (int j = 0; j < 10; ++j) {
104*67e74705SXin Li #pragma omp ordered depend // expected-error {{expected '(' after 'depend'}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
105*67e74705SXin Li #pragma omp ordered depend( // expected-error {{expected ')'}} expected-error {{expected 'source' or 'sink' in OpenMP clause 'depend'}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}} expected-warning {{missing ':' or ')' after dependency type - ignoring}} expected-note {{to match this '('}}
106*67e74705SXin Li #pragma omp ordered depend(source // expected-error {{expected ')'}} expected-note {{to match this '('}}
107*67e74705SXin Li #pragma omp ordered depend(sink // expected-error {{expected expression}} expected-warning {{missing ':' or ')' after dependency type - ignoring}} expected-error {{expected ')'}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}} expected-note {{to match this '('}}
108*67e74705SXin Li #pragma omp ordered depend(sink : // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
109*67e74705SXin Li #pragma omp ordered depend(sink : i // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected 'j' loop iteration variable}}
110*67e74705SXin Li #pragma omp ordered depend(sink : i) // expected-error {{expected 'j' loop iteration variable}}
111*67e74705SXin Li #pragma omp ordered depend(source)
112*67e74705SXin Li                            if (i == j)
113*67e74705SXin Li #pragma omp ordered depend(source) // expected-error {{'#pragma omp ordered' with 'depend' clause cannot be an immediate substatement}}
114*67e74705SXin Li                              ;
115*67e74705SXin Li                            if (i == j)
116*67e74705SXin Li #pragma omp ordered depend(sink : i, j) // expected-error {{'#pragma omp ordered' with 'depend' clause cannot be an immediate substatement}}
117*67e74705SXin Li                              ;
118*67e74705SXin Li #pragma omp ordered depend(source) threads // expected-error {{'depend' clauses cannot be mixed with 'threads' clause}}
119*67e74705SXin Li #pragma omp ordered simd depend(source) // expected-error {{'depend' clauses cannot be mixed with 'simd' clause}}
120*67e74705SXin Li #pragma omp ordered depend(source) depend(source) // expected-error {{directive '#pragma omp ordered' cannot contain more than one 'depend' clause with 'source' dependence}}
121*67e74705SXin Li #pragma omp ordered depend(in : i) // expected-error {{expected 'source' or 'sink' in OpenMP clause 'depend'}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
122*67e74705SXin Li #pragma omp ordered depend(sink : i, j)
123*67e74705SXin Li #pragma omp ordered depend(sink : j, i) // expected-error {{expected 'i' loop iteration variable}} expected-error {{expected 'j' loop iteration variable}}
124*67e74705SXin Li #pragma omp ordered depend(sink : i, j, k) // expected-error {{unexpected expression: number of expressions is larger than the number of associated loops}}
125*67e74705SXin Li #pragma omp ordered depend(sink : i+foo(), j/4) // expected-error {{expression is not an integral constant expression}} expected-error {{expected '+' or '-' operation}}
126*67e74705SXin Li #pragma omp ordered depend(sink : i*0, j-4)// expected-error {{expected '+' or '-' operation}}
127*67e74705SXin Li #pragma omp ordered depend(sink : i-0, j+sizeof(T)) depend(sink : i-0, j+sizeof(T))
128*67e74705SXin Li #pragma omp ordered depend(sink : i-0, j+sizeof(T)) depend(source) // expected-error {{'depend(source)' clause cannot be mixed with 'depend(sink:vec)' clauses}}
129*67e74705SXin Li #pragma omp ordered depend(source) depend(sink : i-0, j+sizeof(T)) // expected-error {{'depend(sink:vec)' clauses cannot be mixed with 'depend(source)' clause}}
130*67e74705SXin Li     }
131*67e74705SXin Li   }
132*67e74705SXin Li   return T();
133*67e74705SXin Li }
134*67e74705SXin Li 
foo()135*67e74705SXin Li int foo() {
136*67e74705SXin Li int k;
137*67e74705SXin Li   #pragma omp for ordered
138*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
139*67e74705SXin Li     L1:
140*67e74705SXin Li       foo();
141*67e74705SXin Li     #pragma omp ordered
142*67e74705SXin Li     {
143*67e74705SXin Li       foo();
144*67e74705SXin Li       goto L1; // expected-error {{use of undeclared label 'L1'}}
145*67e74705SXin Li     }
146*67e74705SXin Li   }
147*67e74705SXin Li   #pragma omp for ordered
148*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
149*67e74705SXin Li     foo();
150*67e74705SXin Li     goto L2; // expected-error {{use of undeclared label 'L2'}}
151*67e74705SXin Li     #pragma omp ordered
152*67e74705SXin Li     {
153*67e74705SXin Li       L2:
154*67e74705SXin Li       foo();
155*67e74705SXin Li     }
156*67e74705SXin Li   }
157*67e74705SXin Li   #pragma omp for ordered
158*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
159*67e74705SXin Li     #pragma omp ordered threads threads // expected-error {{directive '#pragma omp ordered' cannot contain more than one 'threads' clause}}
160*67e74705SXin Li     {
161*67e74705SXin Li       foo();
162*67e74705SXin Li     }
163*67e74705SXin Li   }
164*67e74705SXin Li   #pragma omp for ordered(1) // expected-note {{'ordered' clause with specified parameter}}
165*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
166*67e74705SXin Li     #pragma omp ordered // expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
167*67e74705SXin Li     {
168*67e74705SXin Li       foo();
169*67e74705SXin Li     }
170*67e74705SXin Li   }
171*67e74705SXin Li   #pragma omp for ordered(1) // expected-note {{'ordered' clause with specified parameter}}
172*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
173*67e74705SXin Li     #pragma omp ordered threads // expected-error {{'ordered' directive with 'threads' clause cannot be closely nested inside ordered region with specified parameter}}
174*67e74705SXin Li     {
175*67e74705SXin Li       foo();
176*67e74705SXin Li     }
177*67e74705SXin Li   }
178*67e74705SXin Li   #pragma omp ordered simd simd // expected-error {{directive '#pragma omp ordered' cannot contain more than one 'simd' clause}}
179*67e74705SXin Li   {
180*67e74705SXin Li     foo();
181*67e74705SXin Li   }
182*67e74705SXin Li   #pragma omp simd
183*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
184*67e74705SXin Li     #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
185*67e74705SXin Li     {
186*67e74705SXin Li       foo();
187*67e74705SXin Li     }
188*67e74705SXin Li   }
189*67e74705SXin Li   #pragma omp simd
190*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
191*67e74705SXin Li     #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
192*67e74705SXin Li     {
193*67e74705SXin Li       foo();
194*67e74705SXin Li     }
195*67e74705SXin Li   }
196*67e74705SXin Li   #pragma omp for simd
197*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
198*67e74705SXin Li     #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
199*67e74705SXin Li     {
200*67e74705SXin Li       foo();
201*67e74705SXin Li     }
202*67e74705SXin Li   }
203*67e74705SXin Li   #pragma omp for simd
204*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
205*67e74705SXin Li     #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
206*67e74705SXin Li     {
207*67e74705SXin Li       foo();
208*67e74705SXin Li     }
209*67e74705SXin Li   }
210*67e74705SXin Li   #pragma omp parallel for simd
211*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
212*67e74705SXin Li     #pragma omp ordered // expected-error {{OpenMP constructs may not be nested inside a simd region}}
213*67e74705SXin Li     {
214*67e74705SXin Li       foo();
215*67e74705SXin Li     }
216*67e74705SXin Li   }
217*67e74705SXin Li   #pragma omp parallel for simd
218*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
219*67e74705SXin Li     #pragma omp ordered threads // expected-error {{OpenMP constructs may not be nested inside a simd region}}
220*67e74705SXin Li     {
221*67e74705SXin Li       foo();
222*67e74705SXin Li     }
223*67e74705SXin Li     #pragma omp ordered depend(source) // expected-error {{OpenMP constructs may not be nested inside a simd region}}
224*67e74705SXin Li   }
225*67e74705SXin Li #pragma omp parallel for ordered
226*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
227*67e74705SXin Li     #pragma omp ordered depend(source) // expected-error {{'ordered' directive with 'depend' clause cannot be closely nested inside ordered region without specified parameter}}
228*67e74705SXin Li     #pragma omp ordered depend(sink : i) // expected-error {{'ordered' directive with 'depend' clause cannot be closely nested inside ordered region without specified parameter}}
229*67e74705SXin Li   }
230*67e74705SXin Li #pragma omp parallel for ordered(2) // expected-note 5 {{'ordered' clause with specified parameter}}
231*67e74705SXin Li   for (int i = 0; i < 10; ++i) {
232*67e74705SXin Li     for (int j = 0; j < 10; ++j) {
233*67e74705SXin Li #pragma omp ordered depend // expected-error {{expected '(' after 'depend'}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
234*67e74705SXin Li #pragma omp ordered depend( // expected-error {{expected ')'}} expected-error {{expected 'source' or 'sink' in OpenMP clause 'depend'}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}} expected-warning {{missing ':' or ')' after dependency type - ignoring}} expected-note {{to match this '('}}
235*67e74705SXin Li #pragma omp ordered depend(source // expected-error {{expected ')'}} expected-note {{to match this '('}}
236*67e74705SXin Li #pragma omp ordered depend(sink // expected-error {{expected expression}} expected-warning {{missing ':' or ')' after dependency type - ignoring}} expected-error {{expected ')'}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}} expected-note {{to match this '('}}
237*67e74705SXin Li #pragma omp ordered depend(sink : // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
238*67e74705SXin Li #pragma omp ordered depend(sink : i // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected 'j' loop iteration variable}}
239*67e74705SXin Li #pragma omp ordered depend(sink : i) // expected-error {{expected 'j' loop iteration variable}}
240*67e74705SXin Li #pragma omp ordered depend(source)
241*67e74705SXin Li                            if (i == j)
242*67e74705SXin Li #pragma omp ordered depend(source) // expected-error {{'#pragma omp ordered' with 'depend' clause cannot be an immediate substatement}}
243*67e74705SXin Li                              ;
244*67e74705SXin Li                            if (i == j)
245*67e74705SXin Li #pragma omp ordered depend(sink : i, j) // expected-error {{'#pragma omp ordered' with 'depend' clause cannot be an immediate substatement}}
246*67e74705SXin Li                              ;
247*67e74705SXin Li #pragma omp ordered depend(source) threads // expected-error {{'depend' clauses cannot be mixed with 'threads' clause}}
248*67e74705SXin Li #pragma omp ordered simd depend(source) // expected-error {{'depend' clauses cannot be mixed with 'simd' clause}}
249*67e74705SXin Li #pragma omp ordered depend(source) depend(source) // expected-error {{directive '#pragma omp ordered' cannot contain more than one 'depend' clause with 'source' dependence}}
250*67e74705SXin Li #pragma omp ordered depend(in : i) // expected-error {{expected 'source' or 'sink' in OpenMP clause 'depend'}} expected-error {{'ordered' directive without any clauses cannot be closely nested inside ordered region with specified parameter}}
251*67e74705SXin Li #pragma omp ordered depend(sink : i, j)
252*67e74705SXin Li #pragma omp ordered depend(sink : j, i) // expected-error {{expected 'i' loop iteration variable}} expected-error {{expected 'j' loop iteration variable}}
253*67e74705SXin Li #pragma omp ordered depend(sink : i, j, k) // expected-error {{unexpected expression: number of expressions is larger than the number of associated loops}}
254*67e74705SXin Li #pragma omp ordered depend(sink : i+foo(), j/4) // expected-error {{expression is not an integral constant expression}} expected-error {{expected '+' or '-' operation}}
255*67e74705SXin Li #pragma omp ordered depend(sink : i*0, j-4)// expected-error {{expected '+' or '-' operation}}
256*67e74705SXin Li #pragma omp ordered depend(sink : i-0, j+sizeof(int)) depend(sink : i-0, j+sizeof(int))
257*67e74705SXin Li #pragma omp ordered depend(sink : i-0, j+sizeof(int)) depend(source) // expected-error {{'depend(source)' clause cannot be mixed with 'depend(sink:vec)' clauses}}
258*67e74705SXin Li #pragma omp ordered depend(source) depend(sink : i-0, j+sizeof(int)) // expected-error {{'depend(sink:vec)' clauses cannot be mixed with 'depend(source)' clause}}
259*67e74705SXin Li     }
260*67e74705SXin Li   }
261*67e74705SXin Li 
262*67e74705SXin Li   return foo<int>(); // expected-note {{in instantiation of function template specialization 'foo<int>' requested here}}
263*67e74705SXin Li }
264