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