1*bb83f8e7SJennifer Yu // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -ferror-limit 100 %s -Wuninitialized 2*bb83f8e7SJennifer Yu 3*bb83f8e7SJennifer Yu // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -ferror-limit 100 %s -Wuninitialized 4*bb83f8e7SJennifer Yu 5*bb83f8e7SJennifer Yu // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized 6*bb83f8e7SJennifer Yu // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized 7*bb83f8e7SJennifer Yu foo()8*bb83f8e7SJennifer Yuvoid foo() { 9*bb83f8e7SJennifer Yu } 10*bb83f8e7SJennifer Yu foobool(int argc)11*bb83f8e7SJennifer Yubool foobool(int argc) { 12*bb83f8e7SJennifer Yu return argc; 13*bb83f8e7SJennifer Yu } 14*bb83f8e7SJennifer Yu xxx(int argc)15*bb83f8e7SJennifer Yuvoid xxx(int argc) { 16*bb83f8e7SJennifer Yu int cond; // expected-note {{initialize the variable 'cond' to silence this warning}} 17*bb83f8e7SJennifer Yu #pragma omp parallel masked if(cond) // expected-warning {{variable 'cond' is uninitialized when used here}} 18*bb83f8e7SJennifer Yu { 19*bb83f8e7SJennifer Yu ; 20*bb83f8e7SJennifer Yu } 21*bb83f8e7SJennifer Yu } 22*bb83f8e7SJennifer Yu 23*bb83f8e7SJennifer Yu struct S1; // expected-note {{declared here}} 24*bb83f8e7SJennifer Yu 25*bb83f8e7SJennifer Yu template <class T, class S> // expected-note {{declared here}} tmain(T argc,S ** argv)26*bb83f8e7SJennifer Yuint tmain(T argc, S **argv) { 27*bb83f8e7SJennifer Yu T z; 28*bb83f8e7SJennifer Yu #pragma omp parallel masked if // expected-error {{expected '(' after 'if'}} 29*bb83f8e7SJennifer Yu { 30*bb83f8e7SJennifer Yu foo(); 31*bb83f8e7SJennifer Yu } 32*bb83f8e7SJennifer Yu #pragma omp parallel masked if ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 33*bb83f8e7SJennifer Yu { 34*bb83f8e7SJennifer Yu foo(); 35*bb83f8e7SJennifer Yu } 36*bb83f8e7SJennifer Yu #pragma omp parallel masked if () // expected-error {{expected expression}} 37*bb83f8e7SJennifer Yu { 38*bb83f8e7SJennifer Yu foo(); 39*bb83f8e7SJennifer Yu } 40*bb83f8e7SJennifer Yu #pragma omp parallel masked if (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 41*bb83f8e7SJennifer Yu { 42*bb83f8e7SJennifer Yu foo(); 43*bb83f8e7SJennifer Yu } 44*bb83f8e7SJennifer Yu #pragma omp parallel masked if (argc)) // expected-warning {{extra tokens at the end of '#pragma omp parallel masked' are ignored}} 45*bb83f8e7SJennifer Yu { 46*bb83f8e7SJennifer Yu foo(); 47*bb83f8e7SJennifer Yu } 48*bb83f8e7SJennifer Yu #pragma omp parallel masked if (argc > 0 ? argv[1] : argv[2]) 49*bb83f8e7SJennifer Yu { 50*bb83f8e7SJennifer Yu foo(); 51*bb83f8e7SJennifer Yu } 52*bb83f8e7SJennifer Yu #pragma omp parallel masked if (foobool(argc)), if (true) // expected-error {{directive '#pragma omp parallel masked' cannot contain more than one 'if' clause}} 53*bb83f8e7SJennifer Yu { 54*bb83f8e7SJennifer Yu foo(); 55*bb83f8e7SJennifer Yu } 56*bb83f8e7SJennifer Yu #pragma omp parallel masked if (S) // expected-error {{'S' does not refer to a value}} 57*bb83f8e7SJennifer Yu { 58*bb83f8e7SJennifer Yu foo(); 59*bb83f8e7SJennifer Yu } 60*bb83f8e7SJennifer Yu #pragma omp parallel masked if (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} 61*bb83f8e7SJennifer Yu { 62*bb83f8e7SJennifer Yu foo(); 63*bb83f8e7SJennifer Yu } 64*bb83f8e7SJennifer Yu #pragma omp parallel masked if (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}} 65*bb83f8e7SJennifer Yu { 66*bb83f8e7SJennifer Yu foo(); 67*bb83f8e7SJennifer Yu } 68*bb83f8e7SJennifer Yu #pragma omp parallel masked if(argc + z) 69*bb83f8e7SJennifer Yu { 70*bb83f8e7SJennifer Yu foo(); 71*bb83f8e7SJennifer Yu } 72*bb83f8e7SJennifer Yu #pragma omp parallel masked if(parallel : // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 73*bb83f8e7SJennifer Yu { 74*bb83f8e7SJennifer Yu foo(); 75*bb83f8e7SJennifer Yu } 76*bb83f8e7SJennifer Yu #pragma omp parallel masked if(parallel : argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 77*bb83f8e7SJennifer Yu { 78*bb83f8e7SJennifer Yu foo(); 79*bb83f8e7SJennifer Yu } 80*bb83f8e7SJennifer Yu #pragma omp parallel masked if(parallel : argc) 81*bb83f8e7SJennifer Yu { 82*bb83f8e7SJennifer Yu foo(); 83*bb83f8e7SJennifer Yu } 84*bb83f8e7SJennifer Yu #pragma omp parallel masked if(parallel : argc) if (for:argc) // expected-error {{directive name modifier 'for' is not allowed for '#pragma omp parallel masked'}} 85*bb83f8e7SJennifer Yu { 86*bb83f8e7SJennifer Yu foo(); 87*bb83f8e7SJennifer Yu } 88*bb83f8e7SJennifer Yu #pragma omp parallel masked if(parallel : argc) if (parallel:argc) // expected-error {{directive '#pragma omp parallel masked' cannot contain more than one 'if' clause with 'parallel' name modifier}} 89*bb83f8e7SJennifer Yu { 90*bb83f8e7SJennifer Yu foo(); 91*bb83f8e7SJennifer Yu } 92*bb83f8e7SJennifer Yu #pragma omp parallel masked if(parallel : argc) if (argc) // expected-error {{no more 'if' clause is allowed}} expected-note {{previous clause with directive name modifier specified here}} 93*bb83f8e7SJennifer Yu { 94*bb83f8e7SJennifer Yu foo(); 95*bb83f8e7SJennifer Yu } 96*bb83f8e7SJennifer Yu 97*bb83f8e7SJennifer Yu return 0; 98*bb83f8e7SJennifer Yu } 99*bb83f8e7SJennifer Yu main(int argc,char ** argv)100*bb83f8e7SJennifer Yuint main(int argc, char **argv) { 101*bb83f8e7SJennifer Yu int z; 102*bb83f8e7SJennifer Yu #pragma omp parallel masked if // expected-error {{expected '(' after 'if'}} 103*bb83f8e7SJennifer Yu { 104*bb83f8e7SJennifer Yu foo(); 105*bb83f8e7SJennifer Yu } 106*bb83f8e7SJennifer Yu #pragma omp parallel masked if ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 107*bb83f8e7SJennifer Yu { 108*bb83f8e7SJennifer Yu foo(); 109*bb83f8e7SJennifer Yu } 110*bb83f8e7SJennifer Yu #pragma omp parallel masked if () // expected-error {{expected expression}} 111*bb83f8e7SJennifer Yu { 112*bb83f8e7SJennifer Yu foo(); 113*bb83f8e7SJennifer Yu } 114*bb83f8e7SJennifer Yu #pragma omp parallel masked if (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 115*bb83f8e7SJennifer Yu { 116*bb83f8e7SJennifer Yu foo(); 117*bb83f8e7SJennifer Yu } 118*bb83f8e7SJennifer Yu #pragma omp parallel masked if (argc)) // expected-warning {{extra tokens at the end of '#pragma omp parallel masked' are ignored}} 119*bb83f8e7SJennifer Yu { 120*bb83f8e7SJennifer Yu foo(); 121*bb83f8e7SJennifer Yu } 122*bb83f8e7SJennifer Yu #pragma omp parallel masked if (argc > 0 ? argv[1] : argv[2] + z) 123*bb83f8e7SJennifer Yu { 124*bb83f8e7SJennifer Yu foo(); 125*bb83f8e7SJennifer Yu } 126*bb83f8e7SJennifer Yu #pragma omp parallel masked if (foobool(argc)), if (true) // expected-error {{directive '#pragma omp parallel masked' cannot contain more than one 'if' clause}} 127*bb83f8e7SJennifer Yu { 128*bb83f8e7SJennifer Yu foo(); 129*bb83f8e7SJennifer Yu } 130*bb83f8e7SJennifer Yu #pragma omp parallel masked if (S1) // expected-error {{'S1' does not refer to a value}} 131*bb83f8e7SJennifer Yu { 132*bb83f8e7SJennifer Yu foo(); 133*bb83f8e7SJennifer Yu } 134*bb83f8e7SJennifer Yu #pragma omp parallel masked if (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} 135*bb83f8e7SJennifer Yu { 136*bb83f8e7SJennifer Yu foo(); 137*bb83f8e7SJennifer Yu } 138*bb83f8e7SJennifer Yu #pragma omp parallel masked if (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}} 139*bb83f8e7SJennifer Yu { 140*bb83f8e7SJennifer Yu foo(); 141*bb83f8e7SJennifer Yu } 142*bb83f8e7SJennifer Yu #pragma omp parallel masked if (1 0) // expected-error {{expected ')'}} expected-note {{to match this '('}} 143*bb83f8e7SJennifer Yu { 144*bb83f8e7SJennifer Yu foo(); 145*bb83f8e7SJennifer Yu } 146*bb83f8e7SJennifer Yu #pragma omp parallel masked if(if(tmain(argc, argv) // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 147*bb83f8e7SJennifer Yu { 148*bb83f8e7SJennifer Yu foo(); 149*bb83f8e7SJennifer Yu } 150*bb83f8e7SJennifer Yu #pragma omp parallel masked if(parallel : // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 151*bb83f8e7SJennifer Yu { 152*bb83f8e7SJennifer Yu foo(); 153*bb83f8e7SJennifer Yu } 154*bb83f8e7SJennifer Yu #pragma omp parallel masked if(parallel : argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 155*bb83f8e7SJennifer Yu { 156*bb83f8e7SJennifer Yu foo(); 157*bb83f8e7SJennifer Yu } 158*bb83f8e7SJennifer Yu #pragma omp parallel masked if(parallel : argc) 159*bb83f8e7SJennifer Yu { 160*bb83f8e7SJennifer Yu foo(); 161*bb83f8e7SJennifer Yu } 162*bb83f8e7SJennifer Yu #pragma omp parallel masked if(parallel : argc) if (for:argc) // expected-error {{directive name modifier 'for' is not allowed for '#pragma omp parallel masked'}} 163*bb83f8e7SJennifer Yu { 164*bb83f8e7SJennifer Yu foo(); 165*bb83f8e7SJennifer Yu } 166*bb83f8e7SJennifer Yu #pragma omp parallel masked if(parallel : argc) if (parallel:argc) // expected-error {{directive '#pragma omp parallel masked' cannot contain more than one 'if' clause with 'parallel' name modifier}} 167*bb83f8e7SJennifer Yu { 168*bb83f8e7SJennifer Yu foo(); 169*bb83f8e7SJennifer Yu } 170*bb83f8e7SJennifer Yu #pragma omp parallel masked if(parallel : argc) if (argc) // expected-error {{no more 'if' clause is allowed}} expected-note {{previous clause with directive name modifier specified here}} 171*bb83f8e7SJennifer Yu { 172*bb83f8e7SJennifer Yu foo(); 173*bb83f8e7SJennifer Yu } 174*bb83f8e7SJennifer Yu 175*bb83f8e7SJennifer Yu return tmain(argc, argv); 176*bb83f8e7SJennifer Yu } 177