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*47d6094dScchenvoid 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*47d6094dScchenint 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*47d6094dScchenint 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