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