1176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// RUN: %clang_cc1 -verify -fopenmp=libiomp5 -ferror-limit 100 %s
2176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
3176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct S1 { // expected-note 2 {{declared here}}
4176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  int a;
5176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines};
6176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
7176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestemplate <class T>
8176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesT tmain(T argc) {
9176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
10176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  ;
11176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush untied  // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp flush'}}
12176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush unknown // expected-warning {{extra tokens at the end of '#pragma omp flush' are ignored}}
13176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  if (argc)
14176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
15176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    if (argc) {
16176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
17176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    }
18176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  while (argc)
19176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
20176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    while (argc) {
21176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
22176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    }
23176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  do
24176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
25176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    while (argc)
26176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines      ;
27176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  do {
28176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
29176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  } while (argc);
30176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  switch (argc)
31176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
32176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    switch (argc)
33176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    case 1:
34176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
35176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  switch (argc)
36176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  case 1: {
37176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
38176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  }
39176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  switch (argc) {
40176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
41176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  case 1:
42176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
43176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    break;
44176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  default: {
45176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
46176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  } break;
47176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  }
48176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  for (;;)
49176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
50176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    for (;;) {
51176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
52176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    }
53176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hineslabel:
54176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
55176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hineslabel1 : {
56176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
57176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}
58176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
59176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
60176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush(                              // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
61176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush()                             // expected-error {{expected expression}}
62176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush(argc                          // expected-error {{expected ')'}} expected-note {{to match this '('}}
63176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush(argc,                         // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
64176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush(argc)
65176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush(S1) // expected-error {{'S1' does not refer to a value}}
66176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush(argc) flush(argc) // expected-warning {{extra tokens at the end of '#pragma omp flush' are ignored}}
67176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp parallel flush(argc) // expected-warning {{extra tokens at the end of '#pragma omp parallel' are ignored}}
68176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  ;
69176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  return T();
70176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}
71176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
72176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesint main(int argc, char **argv) {
73176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
74176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  ;
75176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush untied  // expected-error {{unexpected OpenMP clause 'untied' in directive '#pragma omp flush'}}
76176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush unknown // expected-warning {{extra tokens at the end of '#pragma omp flush' are ignored}}
77176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  if (argc)
78176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
79176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    if (argc) {
80176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
81176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    }
82176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  while (argc)
83176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
84176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    while (argc) {
85176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
86176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    }
87176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  do
88176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
89176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    while (argc)
90176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines      ;
91176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  do {
92176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
93176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  } while (argc);
94176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  switch (argc)
95176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
96176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    switch (argc)
97176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    case 1:
98176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
99176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  switch (argc)
100176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  case 1: {
101176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
102176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  }
103176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  switch (argc) {
104176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
105176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  case 1:
106176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
107176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    break;
108176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  default: {
109176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
110176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  } break;
111176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  }
112176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  for (;;)
113176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
114176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    for (;;) {
115176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
116176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    }
117176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hineslabel:
118176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush // expected-error {{'#pragma omp flush' cannot be an immediate substatement}}
119176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hineslabel1 : {
120176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
121176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}
122176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
123176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush
124176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush(                              // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
125176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush()                             // expected-error {{expected expression}}
126176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush(argc                          // expected-error {{expected ')'}} expected-note {{to match this '('}}
127176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush(argc,                         // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
128176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush(argc)
129176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush(S1) // expected-error {{'S1' does not refer to a value}}
130176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp flush(argc) flush(argc) // expected-warning {{extra tokens at the end of '#pragma omp flush' are ignored}}
131176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp parallel flush(argc) // expected-warning {{extra tokens at the end of '#pragma omp parallel' are ignored}}
132176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  ;
133176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  return tmain(argc);
134176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}
135