1a914888bSAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 %s -Wuninitialized
2e4e893bbSAlexander Musman
3a914888bSAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 %s -Wuninitialized
4a8a9153aSAlexey Bataev
foo()5e4e893bbSAlexander Musman void foo() {
6e4e893bbSAlexander Musman }
7e4e893bbSAlexander Musman
foobool(int argc)8e4e893bbSAlexander Musman bool foobool(int argc) {
9e4e893bbSAlexander Musman return argc;
10e4e893bbSAlexander Musman }
11e4e893bbSAlexander Musman
xxx(int argc)12*655cb4a2SAlexey Bataev void xxx(int argc) {
13*655cb4a2SAlexey Bataev int cond; // expected-note {{initialize the variable 'cond' to silence this warning}}
14*655cb4a2SAlexey Bataev #pragma omp parallel for simd if(cond) // expected-warning {{variable 'cond' is uninitialized when used here}}
15*655cb4a2SAlexey Bataev for (int i = 0; i < 10; ++i)
16*655cb4a2SAlexey Bataev ;
17*655cb4a2SAlexey Bataev }
18*655cb4a2SAlexey Bataev
19e4e893bbSAlexander Musman struct S1; // expected-note {{declared here}}
20e4e893bbSAlexander Musman
21e4e893bbSAlexander Musman template <class T, class S> // expected-note {{declared here}}
tmain(T argc,S ** argv)22e4e893bbSAlexander Musman int tmain(T argc, S **argv) {
23a914888bSAlexey Bataev T i, z;
24e4e893bbSAlexander Musman #pragma omp parallel for simd if // expected-error {{expected '(' after 'if'}}
25e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
26e4e893bbSAlexander Musman #pragma omp parallel for simd if ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
27e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
28e4e893bbSAlexander Musman #pragma omp parallel for simd if () // expected-error {{expected expression}}
29e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
30e4e893bbSAlexander Musman #pragma omp parallel for simd if (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
31e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
32e4e893bbSAlexander Musman #pragma omp parallel for simd if (argc)) // expected-warning {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}
33e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
34e4e893bbSAlexander Musman #pragma omp parallel for simd if (argc > 0 ? argv[1] : argv[2])
35e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
36e4e893bbSAlexander Musman #pragma omp parallel for simd if (foobool(argc)), if (true) // expected-error {{directive '#pragma omp parallel for simd' cannot contain more than one 'if' clause}}
37e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
38e4e893bbSAlexander Musman #pragma omp parallel for simd if (S) // expected-error {{'S' does not refer to a value}}
39e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
40e4e893bbSAlexander Musman #pragma omp parallel for simd if (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}}
41e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
42e4e893bbSAlexander Musman #pragma omp parallel for simd if (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}}
43e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
44a914888bSAlexey Bataev #pragma omp parallel for simd if(argc + z)
45e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
462a6de8c3SAlexey Bataev #pragma omp parallel for simd if(parallel // expected-error {{use of undeclared identifier 'parallel'}} expected-error {{expected ')'}} expected-note {{to match this '('}}
476b8046adSAlexey Bataev for (i = 0; i < argc; ++i) foo();
486b8046adSAlexey Bataev #pragma omp parallel for simd if(parallel : // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
496b8046adSAlexey Bataev for (i = 0; i < argc; ++i) foo();
506b8046adSAlexey Bataev #pragma omp parallel for simd if(parallel : argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
516b8046adSAlexey Bataev for (i = 0; i < argc; ++i) foo();
526b8046adSAlexey Bataev #pragma omp parallel for simd if(parallel : argc)
536b8046adSAlexey Bataev for (i = 0; i < argc; ++i) foo();
546b8046adSAlexey Bataev #pragma omp parallel for simd if(parallel : argc) if (for:argc) // expected-error {{directive name modifier 'for' is not allowed for '#pragma omp parallel for simd'}}
556b8046adSAlexey Bataev for (i = 0; i < argc; ++i) foo();
566b8046adSAlexey Bataev #pragma omp parallel for simd if(parallel : argc) if (parallel:argc) // expected-error {{directive '#pragma omp parallel for simd' cannot contain more than one 'if' clause with 'parallel' name modifier}}
576b8046adSAlexey Bataev for (i = 0; i < argc; ++i) foo();
58ecb156abSAlexey Bataev #pragma omp parallel for simd if(parallel : argc) if (argc) // expected-error {{no more 'if' clause is allowed}} expected-note {{previous clause with directive name modifier specified here}}
596b8046adSAlexey Bataev for (i = 0; i < argc; ++i) foo();
60e4e893bbSAlexander Musman
61e4e893bbSAlexander Musman return 0;
62e4e893bbSAlexander Musman }
63e4e893bbSAlexander Musman
main(int argc,char ** argv)64e4e893bbSAlexander Musman int main(int argc, char **argv) {
65a914888bSAlexey Bataev int i, z;
66e4e893bbSAlexander Musman #pragma omp parallel for simd if // expected-error {{expected '(' after 'if'}}
67e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
68e4e893bbSAlexander Musman #pragma omp parallel for simd if ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
69e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
70e4e893bbSAlexander Musman #pragma omp parallel for simd if () // expected-error {{expected expression}}
71e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
72e4e893bbSAlexander Musman #pragma omp parallel for simd if (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
73e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
74e4e893bbSAlexander Musman #pragma omp parallel for simd if (argc)) // expected-warning {{extra tokens at the end of '#pragma omp parallel for simd' are ignored}}
75e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
76e4e893bbSAlexander Musman #pragma omp parallel for simd if (argc > 0 ? argv[1] : argv[2])
77e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
78e4e893bbSAlexander Musman #pragma omp parallel for simd if (foobool(argc)), if (true) // expected-error {{directive '#pragma omp parallel for simd' cannot contain more than one 'if' clause}}
79e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
80e4e893bbSAlexander Musman #pragma omp parallel for simd if (S1) // expected-error {{'S1' does not refer to a value}}
81e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
82e4e893bbSAlexander Musman #pragma omp parallel for simd if (argv[1]=2) // expected-error {{expected ')'}} expected-note {{to match this '('}}
83e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
84e4e893bbSAlexander Musman #pragma omp parallel for simd if (argc argc) // expected-error {{expected ')'}} expected-note {{to match this '('}}
85e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
86e4e893bbSAlexander Musman #pragma omp parallel for simd if (1 0) // expected-error {{expected ')'}} expected-note {{to match this '('}}
87e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
88e4e893bbSAlexander Musman #pragma omp parallel for simd if(if(tmain(argc, argv) // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
89e4e893bbSAlexander Musman for (i = 0; i < argc; ++i) foo();
902a6de8c3SAlexey Bataev #pragma omp parallel for simd if(parallel // expected-error {{use of undeclared identifier 'parallel'}} expected-error {{expected ')'}} expected-note {{to match this '('}}
916b8046adSAlexey Bataev for (i = 0; i < argc; ++i) foo();
926b8046adSAlexey Bataev #pragma omp parallel for simd if(parallel : // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
936b8046adSAlexey Bataev for (i = 0; i < argc; ++i) foo();
946b8046adSAlexey Bataev #pragma omp parallel for simd if(parallel : argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
956b8046adSAlexey Bataev for (i = 0; i < argc; ++i) foo();
96a914888bSAlexey Bataev #pragma omp parallel for simd if(parallel : argc / z)
976b8046adSAlexey Bataev for (i = 0; i < argc; ++i) foo();
986b8046adSAlexey Bataev #pragma omp parallel for simd if(parallel : argc) if (for:argc) // expected-error {{directive name modifier 'for' is not allowed for '#pragma omp parallel for simd'}}
996b8046adSAlexey Bataev for (i = 0; i < argc; ++i) foo();
1006b8046adSAlexey Bataev #pragma omp parallel for simd if(parallel : argc) if (parallel:argc) // expected-error {{directive '#pragma omp parallel for simd' cannot contain more than one 'if' clause with 'parallel' name modifier}}
1016b8046adSAlexey Bataev for (i = 0; i < argc; ++i) foo();
102ecb156abSAlexey Bataev #pragma omp parallel for simd if(parallel : argc) if (argc) // expected-error {{no more 'if' clause is allowed}} expected-note {{previous clause with directive name modifier specified here}}
1036b8046adSAlexey Bataev for (i = 0; i < argc; ++i) foo();
104e4e893bbSAlexander Musman
105e4e893bbSAlexander Musman return tmain(argc, argv);
106e4e893bbSAlexander Musman }
107