1 // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -std=c++11 -o - %s
2 
3 void foo() {
4 }
5 
6 #pragma omp parallel // expected-error {{unexpected OpenMP directive '#pragma omp parallel'}}
7 
8 int main(int argc, char **argv) {
9   #pragma omp parallel
10   #pragma omp parallel unknown() // expected-warning {{extra tokens at the end of '#pragma omp parallel' are ignored}}
11   foo();
12   L1:
13     foo();
14   #pragma omp parallel
15   ;
16   #pragma omp parallel
17   {
18     goto L1; // expected-error {{use of undeclared label 'L1'}}
19     argc++;
20   }
21 
22   for (int i = 0; i < 10; ++i) {
23     switch(argc) {
24      case (0):
25       #pragma omp parallel
26       {
27         foo();
28         break; // expected-error {{'break' statement not in loop or switch statement}}
29         continue; // expected-error {{'continue' statement not in loop statement}}
30       }
31       default:
32        break;
33     }
34   }
35   #pragma omp parallel default(none)
36   ++argc; // expected-error {{variable 'argc' must have explicitly specified data sharing attributes}}
37 
38   goto L2; // expected-error {{use of undeclared label 'L2'}}
39   #pragma omp parallel
40   L2:
41   foo();
42   #pragma omp parallel
43   {
44     return 1; // expected-error {{cannot return from OpenMP region}}
45   }
46 
47   [[]] // expected-error {{an attribute list cannot appear here}}
48   #pragma omp parallel
49   for (int n = 0; n < 100; ++n) {}
50 
51   return 0;
52 }
53 
54