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