xref: /llvm-project/clang/test/OpenMP/parallel_master_message.cpp (revision 47d6094d7fd463707598a0e65dd44a0d1cc279eb)
1*47d6094dScchen // RUN: %clang_cc1 -verify -fopenmp %s -Wuninitialized
2*47d6094dScchen 
3*47d6094dScchen // RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized
4*47d6094dScchen 
xxx(int argc)5*47d6094dScchen void xxx(int argc) {
6*47d6094dScchen   int x; // expected-note {{initialize the variable 'x' to silence this warning}}
7*47d6094dScchen #pragma omp parallel master
8*47d6094dScchen   argc = x; // expected-warning {{variable 'x' is uninitialized when used here}}
9*47d6094dScchen }
10*47d6094dScchen 
11*47d6094dScchen #pragma omp parallel master // expected-error {{unexpected OpenMP directive '#pragma omp parallel master'}}
12*47d6094dScchen 
foo()13*47d6094dScchen int foo() {
14*47d6094dScchen   return 0;
15*47d6094dScchen }
16*47d6094dScchen 
17*47d6094dScchen int a;
18*47d6094dScchen struct S;
19*47d6094dScchen S& bar();
main(int argc,char ** argv)20*47d6094dScchen int main(int argc, char **argv) {
21*47d6094dScchen   #pragma omp parallel master nowait // expected-error {{unexpected OpenMP clause 'nowait' in directive '#pragma omp parallel master'}}
22*47d6094dScchen   #pragma omp parallel master unknown // expected-warning {{extra tokens at the end of '#pragma omp parallel master' are ignored}}
23*47d6094dScchen   foo();
24*47d6094dScchen   {
25*47d6094dScchen     #pragma omp master
26*47d6094dScchen   } // expected-error {{expected statement}}
27*47d6094dScchen   {
28*47d6094dScchen     #pragma omp parallel master
29*47d6094dScchen   } // expected-error {{expected statement}}
30*47d6094dScchen 
31*47d6094dScchen   S &s = bar();
32*47d6094dScchen   #pragma omp parallel master
33*47d6094dScchen   (void)&s;
34*47d6094dScchen   #pragma omp parallel master { // expected-warning {{extra tokens at the end of '#pragma omp parallel master' are ignored}}
35*47d6094dScchen   foo();
36*47d6094dScchen   #pragma omp parallel master ( // expected-warning {{extra tokens at the end of '#pragma omp parallel master' are ignored}}
37*47d6094dScchen   foo();
38*47d6094dScchen   #pragma omp parallel master [ // expected-warning {{extra tokens at the end of '#pragma omp parallel master' are ignored}}
39*47d6094dScchen   foo();
40*47d6094dScchen   #pragma omp parallel master ] // expected-warning {{extra tokens at the end of '#pragma omp parallel master' are ignored}}
41*47d6094dScchen   foo();
42*47d6094dScchen   #pragma omp parallel master ) // expected-warning {{extra tokens at the end of '#pragma omp parallel master' are ignored}}
43*47d6094dScchen   foo();
44*47d6094dScchen   #pragma omp parallel master } // expected-warning {{extra tokens at the end of '#pragma omp parallel master' are ignored}}
45*47d6094dScchen   foo();
46*47d6094dScchen   #pragma omp parallel master
47*47d6094dScchen   // expected-warning@+1 {{extra tokens at the end of '#pragma omp parallel master' are ignored}}
48*47d6094dScchen   #pragma omp parallel master unknown()
49*47d6094dScchen   foo();
50*47d6094dScchen   L1:
51*47d6094dScchen     foo();
52*47d6094dScchen   #pragma omp parallel master
53*47d6094dScchen   ;
54*47d6094dScchen   #pragma omp parallel master
55*47d6094dScchen   {
56*47d6094dScchen 
57*47d6094dScchen   for (int i = 0; i < 10; ++i) {
58*47d6094dScchen     switch(argc) {
59*47d6094dScchen      case (0):
60*47d6094dScchen       #pragma omp parallel master
61*47d6094dScchen       {
62*47d6094dScchen         foo();
63*47d6094dScchen         break; // expected-error {{'break' statement not in loop or switch statement}}
64*47d6094dScchen         continue; // expected-error {{'continue' statement not in loop statement}}
65*47d6094dScchen       }
66*47d6094dScchen       default:
67*47d6094dScchen        break;
68*47d6094dScchen     }
69*47d6094dScchen   }
70*47d6094dScchen     goto L1; // expected-error {{use of undeclared label 'L1'}}
71*47d6094dScchen     argc++;
72*47d6094dScchen   }
73*47d6094dScchen #pragma omp parallel master default(none) // expected-note 2 {{explicit data sharing attribute requested here}}
74*47d6094dScchen   {
75*47d6094dScchen     ++argc; // expected-error {{variable 'argc' must have explicitly specified data sharing attributes}}
76*47d6094dScchen     ++a;    // expected-error {{variable 'a' must have explicitly specified data sharing attributes}}
77*47d6094dScchen   }
78*47d6094dScchen 
79*47d6094dScchen   goto L2; // expected-error {{use of undeclared label 'L2'}}
80*47d6094dScchen   #pragma omp parallel master
81*47d6094dScchen   L2:
82*47d6094dScchen   foo();
83*47d6094dScchen   #pragma omp parallel master
84*47d6094dScchen   {
85*47d6094dScchen     return 1; // expected-error {{cannot return from OpenMP region}}
86*47d6094dScchen   }
87*47d6094dScchen   return 0;
88*47d6094dScchen }
89