147d6094dScchen // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -ferror-limit 100 %s -Wuninitialized 247d6094dScchen 347d6094dScchen // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 -ferror-limit 100 %s -Wuninitialized 447d6094dScchen 5*eaa341fbSSaiyedul Islam // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized 6*eaa341fbSSaiyedul Islam // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized 7*eaa341fbSSaiyedul Islam foo()847d6094dScchenvoid foo() { 947d6094dScchen } 1047d6094dScchen foobool(int argc)1147d6094dScchenbool foobool(int argc) { 1247d6094dScchen return argc; 1347d6094dScchen } 1447d6094dScchen xxx(int argc)1547d6094dScchenvoid xxx(int argc) { 1647d6094dScchen int cond; // expected-note {{initialize the variable 'cond' to silence this warning}} 1747d6094dScchen #pragma omp parallel master if(cond) // expected-warning {{variable 'cond' is uninitialized when used here}} 1847d6094dScchen { 1947d6094dScchen ; 2047d6094dScchen } 2147d6094dScchen } 2247d6094dScchen 2347d6094dScchen struct S1; // expected-note {{declared here}} 2447d6094dScchen 2547d6094dScchen template <class T, class S> // expected-note {{declared here}} tmain(T argc,S ** argv)2647d6094dScchenint tmain(T argc, S **argv) { 2747d6094dScchen T z; 2847d6094dScchen #pragma omp parallel master if // expected-error {{expected '(' after 'if'}} 2947d6094dScchen { 3047d6094dScchen foo(); 3147d6094dScchen } 3247d6094dScchen #pragma omp parallel master if ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 3347d6094dScchen { 3447d6094dScchen foo(); 3547d6094dScchen } 3647d6094dScchen #pragma omp parallel master if () // expected-error {{expected expression}} 3747d6094dScchen { 3847d6094dScchen foo(); 3947d6094dScchen } 4047d6094dScchen #pragma omp parallel master if (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 4147d6094dScchen { 4247d6094dScchen foo(); 4347d6094dScchen } 4447d6094dScchen #pragma omp parallel master if (argc)) // expected-warning {{extra tokens at the end of '#pragma omp parallel master' are ignored}} 4547d6094dScchen { 4647d6094dScchen foo(); 4747d6094dScchen } 4847d6094dScchen #pragma omp parallel master if (argc > 0 ? argv[1] : argv[2]) 4947d6094dScchen { 5047d6094dScchen foo(); 5147d6094dScchen } 5247d6094dScchen #pragma omp parallel master if (foobool(argc)), if (true) // expected-error {{directive '#pragma omp parallel master' cannot contain more than one 'if' clause}} 5347d6094dScchen { 5447d6094dScchen foo(); 5547d6094dScchen } 5647d6094dScchen #pragma omp parallel master if (S) // expected-error {{'S' does not refer to a value}} 5747d6094dScchen { 5847d6094dScchen foo(); 5947d6094dScchen } 6047d6094dScchen #pragma omp parallel master if (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} 6147d6094dScchen { 6247d6094dScchen foo(); 6347d6094dScchen } 6447d6094dScchen #pragma omp parallel master if (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}} 6547d6094dScchen { 6647d6094dScchen foo(); 6747d6094dScchen } 6847d6094dScchen #pragma omp parallel master if(argc + z) 6947d6094dScchen { 7047d6094dScchen foo(); 7147d6094dScchen } 7247d6094dScchen #pragma omp parallel master if(parallel : // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 7347d6094dScchen { 7447d6094dScchen foo(); 7547d6094dScchen } 7647d6094dScchen #pragma omp parallel master if(parallel : argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 7747d6094dScchen { 7847d6094dScchen foo(); 7947d6094dScchen } 8047d6094dScchen #pragma omp parallel master if(parallel : argc) 8147d6094dScchen { 8247d6094dScchen foo(); 8347d6094dScchen } 8447d6094dScchen #pragma omp parallel master if(parallel : argc) if (for:argc) // expected-error {{directive name modifier 'for' is not allowed for '#pragma omp parallel master'}} 8547d6094dScchen { 8647d6094dScchen foo(); 8747d6094dScchen } 8847d6094dScchen #pragma omp parallel master if(parallel : argc) if (parallel:argc) // expected-error {{directive '#pragma omp parallel master' cannot contain more than one 'if' clause with 'parallel' name modifier}} 8947d6094dScchen { 9047d6094dScchen foo(); 9147d6094dScchen } 9247d6094dScchen #pragma omp parallel master if(parallel : argc) if (argc) // expected-error {{no more 'if' clause is allowed}} expected-note {{previous clause with directive name modifier specified here}} 9347d6094dScchen { 9447d6094dScchen foo(); 9547d6094dScchen } 9647d6094dScchen 9747d6094dScchen return 0; 9847d6094dScchen } 9947d6094dScchen main(int argc,char ** argv)10047d6094dScchenint main(int argc, char **argv) { 10147d6094dScchen int z; 10247d6094dScchen #pragma omp parallel master if // expected-error {{expected '(' after 'if'}} 10347d6094dScchen { 10447d6094dScchen foo(); 10547d6094dScchen } 10647d6094dScchen #pragma omp parallel master if ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 10747d6094dScchen { 10847d6094dScchen foo(); 10947d6094dScchen } 11047d6094dScchen #pragma omp parallel master if () // expected-error {{expected expression}} 11147d6094dScchen { 11247d6094dScchen foo(); 11347d6094dScchen } 11447d6094dScchen #pragma omp parallel master if (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 11547d6094dScchen { 11647d6094dScchen foo(); 11747d6094dScchen } 11847d6094dScchen #pragma omp parallel master if (argc)) // expected-warning {{extra tokens at the end of '#pragma omp parallel master' are ignored}} 11947d6094dScchen { 12047d6094dScchen foo(); 12147d6094dScchen } 12247d6094dScchen #pragma omp parallel master if (argc > 0 ? argv[1] : argv[2] + z) 12347d6094dScchen { 12447d6094dScchen foo(); 12547d6094dScchen } 12647d6094dScchen #pragma omp parallel master if (foobool(argc)), if (true) // expected-error {{directive '#pragma omp parallel master' cannot contain more than one 'if' clause}} 12747d6094dScchen { 12847d6094dScchen foo(); 12947d6094dScchen } 13047d6094dScchen #pragma omp parallel master if (S1) // expected-error {{'S1' does not refer to a value}} 13147d6094dScchen { 13247d6094dScchen foo(); 13347d6094dScchen } 13447d6094dScchen #pragma omp parallel master if (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}} 13547d6094dScchen { 13647d6094dScchen foo(); 13747d6094dScchen } 13847d6094dScchen #pragma omp parallel master if (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}} 13947d6094dScchen { 14047d6094dScchen foo(); 14147d6094dScchen } 14247d6094dScchen #pragma omp parallel master if (1 0) // expected-error {{expected ')'}} expected-note {{to match this '('}} 14347d6094dScchen { 14447d6094dScchen foo(); 14547d6094dScchen } 14647d6094dScchen #pragma omp parallel master if(if(tmain(argc, argv) // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 14747d6094dScchen { 14847d6094dScchen foo(); 14947d6094dScchen } 15047d6094dScchen #pragma omp parallel master if(parallel : // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 15147d6094dScchen { 15247d6094dScchen foo(); 15347d6094dScchen } 15447d6094dScchen #pragma omp parallel master if(parallel : argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 15547d6094dScchen { 15647d6094dScchen foo(); 15747d6094dScchen } 15847d6094dScchen #pragma omp parallel master if(parallel : argc) 15947d6094dScchen { 16047d6094dScchen foo(); 16147d6094dScchen } 16247d6094dScchen #pragma omp parallel master if(parallel : argc) if (for:argc) // expected-error {{directive name modifier 'for' is not allowed for '#pragma omp parallel master'}} 16347d6094dScchen { 16447d6094dScchen foo(); 16547d6094dScchen } 16647d6094dScchen #pragma omp parallel master if(parallel : argc) if (parallel:argc) // expected-error {{directive '#pragma omp parallel master' cannot contain more than one 'if' clause with 'parallel' name modifier}} 16747d6094dScchen { 16847d6094dScchen foo(); 16947d6094dScchen } 17047d6094dScchen #pragma omp parallel master if(parallel : argc) if (argc) // expected-error {{no more 'if' clause is allowed}} expected-note {{previous clause with directive name modifier specified here}} 17147d6094dScchen { 17247d6094dScchen foo(); 17347d6094dScchen } 17447d6094dScchen 17547d6094dScchen return tmain(argc, argv); 17647d6094dScchen } 177