1 // RUN: %clang_cc1 -verify -fopenmp %s
2 
3 // RUN: %clang_cc1 -verify -fopenmp-simd %s
4 
5 int foo();
6 
7 int main() {
8   #pragma omp master
9   ;
10   #pragma omp master nowait // expected-error {{unexpected OpenMP clause 'nowait' in directive '#pragma omp master'}}
11   #pragma omp master unknown // expected-warning {{extra tokens at the end of '#pragma omp master' are ignored}}
12   foo();
13   {
14     #pragma omp master
15   } // expected-error {{expected statement}}
16   #pragma omp for
17   for (int i = 0; i < 10; ++i) {
18     foo();
19     #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
20     foo();
21   }
22   #pragma omp sections
23   {
24     foo();
25     #pragma omp master // expected-error {{region cannot be closely nested inside 'sections' region}}
26     foo();
27   }
28   #pragma omp single
29   for (int i = 0; i < 10; ++i) {
30     foo();
31     #pragma omp master // expected-error {{region cannot be closely nested inside 'single' region}}
32     foo();
33   }
34   #pragma omp master
35   for (int i = 0; i < 10; ++i) {
36     foo();
37     #pragma omp master
38     foo();
39   }
40   #pragma omp for ordered
41   for (int i = 0; i < 10; ++i)
42   #pragma omp master // expected-error {{region cannot be closely nested inside 'for' region}}
43   {
44     foo();
45   }
46 
47   return 0;
48 }
49 
50 int foo() {
51   L1:
52     foo();
53   #pragma omp master
54   {
55     foo();
56     goto L1; // expected-error {{use of undeclared label 'L1'}}
57   }
58   goto L2; // expected-error {{use of undeclared label 'L2'}}
59   #pragma omp master
60   {
61     L2:
62     foo();
63   }
64 
65   return 0;
66 }
67