xref: /aosp_15_r20/external/clang/test/OpenMP/flush_messages.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s
2*67e74705SXin Li 
3*67e74705SXin Li struct S1 { // expected-note 2 {{declared here}}
4*67e74705SXin Li   int a;
5*67e74705SXin Li };
6*67e74705SXin Li 
7*67e74705SXin Li template <class T>
tmain(T argc)8*67e74705SXin Li T tmain(T argc) {
9*67e74705SXin Li #pragma omp flush
10*67e74705SXin Li   ;
11*67e74705SXin Li #pragma omp flush untied  // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp flush'}}
12*67e74705SXin Li #pragma omp flush unknown // expected-warning {{extra tokens at the end of '#pragma omp flush' are ignored}}
13*67e74705SXin Li   if (argc)
14*67e74705SXin Li #pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
15*67e74705SXin Li     if (argc) {
16*67e74705SXin Li #pragma omp flush
17*67e74705SXin Li     }
18*67e74705SXin Li   while (argc)
19*67e74705SXin Li #pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
20*67e74705SXin Li     while (argc) {
21*67e74705SXin Li #pragma omp flush
22*67e74705SXin Li     }
23*67e74705SXin Li   do
24*67e74705SXin Li #pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
25*67e74705SXin Li     while (argc)
26*67e74705SXin Li       ;
27*67e74705SXin Li   do {
28*67e74705SXin Li #pragma omp flush
29*67e74705SXin Li   } while (argc);
30*67e74705SXin Li   switch (argc)
31*67e74705SXin Li #pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
32*67e74705SXin Li     switch (argc)
33*67e74705SXin Li     case 1:
34*67e74705SXin Li #pragma omp flush
35*67e74705SXin Li   switch (argc)
36*67e74705SXin Li   case 1: {
37*67e74705SXin Li #pragma omp flush
38*67e74705SXin Li   }
39*67e74705SXin Li   switch (argc) {
40*67e74705SXin Li #pragma omp flush
41*67e74705SXin Li   case 1:
42*67e74705SXin Li #pragma omp flush
43*67e74705SXin Li     break;
44*67e74705SXin Li   default: {
45*67e74705SXin Li #pragma omp flush
46*67e74705SXin Li   } break;
47*67e74705SXin Li   }
48*67e74705SXin Li   for (;;)
49*67e74705SXin Li #pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
50*67e74705SXin Li     for (;;) {
51*67e74705SXin Li #pragma omp flush
52*67e74705SXin Li     }
53*67e74705SXin Li label:
54*67e74705SXin Li #pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
55*67e74705SXin Li label1 : {
56*67e74705SXin Li #pragma omp flush
57*67e74705SXin Li }
58*67e74705SXin Li 
59*67e74705SXin Li #pragma omp flush
60*67e74705SXin Li #pragma omp flush(                              // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
61*67e74705SXin Li #pragma omp flush()                             // expected-error {{expected expression}}
62*67e74705SXin Li #pragma omp flush(argc                          // expected-error {{expected ')'}} expected-note {{to match this '('}}
63*67e74705SXin Li #pragma omp flush(argc,                         // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
64*67e74705SXin Li #pragma omp flush(argc)
65*67e74705SXin Li #pragma omp flush(S1) // expected-error {{'S1' does not refer to a value}}
66*67e74705SXin Li #pragma omp flush(argc) flush(argc) // expected-warning {{extra tokens at the end of '#pragma omp flush' are ignored}}
67*67e74705SXin Li #pragma omp parallel flush(argc) // expected-warning {{extra tokens at the end of '#pragma omp parallel' are ignored}}
68*67e74705SXin Li   ;
69*67e74705SXin Li   return T();
70*67e74705SXin Li }
71*67e74705SXin Li 
main(int argc,char ** argv)72*67e74705SXin Li int main(int argc, char **argv) {
73*67e74705SXin Li #pragma omp flush
74*67e74705SXin Li   ;
75*67e74705SXin Li #pragma omp flush untied  // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp flush'}}
76*67e74705SXin Li #pragma omp flush unknown // expected-warning {{extra tokens at the end of '#pragma omp flush' are ignored}}
77*67e74705SXin Li   if (argc)
78*67e74705SXin Li #pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
79*67e74705SXin Li     if (argc) {
80*67e74705SXin Li #pragma omp flush
81*67e74705SXin Li     }
82*67e74705SXin Li   while (argc)
83*67e74705SXin Li #pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
84*67e74705SXin Li     while (argc) {
85*67e74705SXin Li #pragma omp flush
86*67e74705SXin Li     }
87*67e74705SXin Li   do
88*67e74705SXin Li #pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
89*67e74705SXin Li     while (argc)
90*67e74705SXin Li       ;
91*67e74705SXin Li   do {
92*67e74705SXin Li #pragma omp flush
93*67e74705SXin Li   } while (argc);
94*67e74705SXin Li   switch (argc)
95*67e74705SXin Li #pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
96*67e74705SXin Li     switch (argc)
97*67e74705SXin Li     case 1:
98*67e74705SXin Li #pragma omp flush
99*67e74705SXin Li   switch (argc)
100*67e74705SXin Li   case 1: {
101*67e74705SXin Li #pragma omp flush
102*67e74705SXin Li   }
103*67e74705SXin Li   switch (argc) {
104*67e74705SXin Li #pragma omp flush
105*67e74705SXin Li   case 1:
106*67e74705SXin Li #pragma omp flush
107*67e74705SXin Li     break;
108*67e74705SXin Li   default: {
109*67e74705SXin Li #pragma omp flush
110*67e74705SXin Li   } break;
111*67e74705SXin Li   }
112*67e74705SXin Li   for (;;)
113*67e74705SXin Li #pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
114*67e74705SXin Li     for (;;) {
115*67e74705SXin Li #pragma omp flush
116*67e74705SXin Li     }
117*67e74705SXin Li label:
118*67e74705SXin Li #pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
119*67e74705SXin Li label1 : {
120*67e74705SXin Li #pragma omp flush
121*67e74705SXin Li }
122*67e74705SXin Li 
123*67e74705SXin Li #pragma omp flush
124*67e74705SXin Li #pragma omp flush(                              // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
125*67e74705SXin Li #pragma omp flush()                             // expected-error {{expected expression}}
126*67e74705SXin Li #pragma omp flush(argc                          // expected-error {{expected ')'}} expected-note {{to match this '('}}
127*67e74705SXin Li #pragma omp flush(argc,                         // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
128*67e74705SXin Li #pragma omp flush(argc)
129*67e74705SXin Li #pragma omp flush(S1) // expected-error {{'S1' does not refer to a value}}
130*67e74705SXin Li #pragma omp flush(argc) flush(argc) // expected-warning {{extra tokens at the end of '#pragma omp flush' are ignored}}
131*67e74705SXin Li #pragma omp parallel flush(argc) // expected-warning {{extra tokens at the end of '#pragma omp parallel' are ignored}}
132*67e74705SXin Li   ;
133*67e74705SXin Li   return tmain(argc);
134*67e74705SXin Li }
135