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