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 Yuvoid 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 Yuint 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 Yuint 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