xref: /llvm-project/clang/test/OpenMP/parallel_master_if_messages.cpp (revision eaa341fbea961894759355256d25d785509002ef)
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()847d6094dScchen void foo() {
947d6094dScchen }
1047d6094dScchen 
foobool(int argc)1147d6094dScchen bool foobool(int argc) {
1247d6094dScchen   return argc;
1347d6094dScchen }
1447d6094dScchen 
xxx(int argc)1547d6094dScchen void 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)2647d6094dScchen int 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)10047d6094dScchen int 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