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