Clang Project

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