1*a914888bSAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized
284d0b3efSAlexey Bataev
3*a914888bSAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized
4a8a9153aSAlexey Bataev
foo()584d0b3efSAlexey Bataev void foo() {
684d0b3efSAlexey Bataev }
784d0b3efSAlexey Bataev
foobool(int argc)884d0b3efSAlexey Bataev bool foobool(int argc) {
984d0b3efSAlexey Bataev return argc;
1084d0b3efSAlexey Bataev }
1184d0b3efSAlexey Bataev
1284d0b3efSAlexey Bataev struct S1; // expected-note {{declared here}}
1384d0b3efSAlexey Bataev extern S1 a;
1484d0b3efSAlexey Bataev class S2 {
1584d0b3efSAlexey Bataev mutable int a;
1684d0b3efSAlexey Bataev
1784d0b3efSAlexey Bataev public:
S2()1884d0b3efSAlexey Bataev S2() : a(0) {}
S2(S2 & s2)1984d0b3efSAlexey Bataev S2(S2 &s2) : a(s2.a) {}
2084d0b3efSAlexey Bataev };
2184d0b3efSAlexey Bataev const S2 b;
2284d0b3efSAlexey Bataev const S2 ba[5];
2384d0b3efSAlexey Bataev class S3 {
2484d0b3efSAlexey Bataev int a;
2584d0b3efSAlexey Bataev
2684d0b3efSAlexey Bataev public:
S3()2784d0b3efSAlexey Bataev S3() : a(0) {}
S3(S3 & s3)2884d0b3efSAlexey Bataev S3(S3 &s3) : a(s3.a) {}
2984d0b3efSAlexey Bataev };
3084d0b3efSAlexey Bataev const S3 c;
3184d0b3efSAlexey Bataev const S3 ca[5];
3284d0b3efSAlexey Bataev extern const int f;
3384d0b3efSAlexey Bataev class S4 {
3484d0b3efSAlexey Bataev int a;
3584d0b3efSAlexey Bataev S4();
3684d0b3efSAlexey Bataev S4(const S4 &s4);
3784d0b3efSAlexey Bataev
3884d0b3efSAlexey Bataev public:
S4(int v)3984d0b3efSAlexey Bataev S4(int v) : a(v) {}
4084d0b3efSAlexey Bataev };
4184d0b3efSAlexey Bataev class S5 {
4284d0b3efSAlexey Bataev int a;
S5()4384d0b3efSAlexey Bataev S5() : a(0) {}
S5(const S5 & s5)4484d0b3efSAlexey Bataev S5(const S5 &s5) : a(s5.a) {}
4584d0b3efSAlexey Bataev
4684d0b3efSAlexey Bataev public:
S5(int v)4784d0b3efSAlexey Bataev S5(int v) : a(v) {}
4884d0b3efSAlexey Bataev };
4984d0b3efSAlexey Bataev
5084d0b3efSAlexey Bataev S3 h;
5184d0b3efSAlexey Bataev #pragma omp threadprivate(h) // expected-note {{defined as threadprivate or thread local}}
5284d0b3efSAlexey Bataev
536ddfe1a6SAlexey Bataev namespace A {
546ddfe1a6SAlexey Bataev double x;
556ddfe1a6SAlexey Bataev #pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}}
566ddfe1a6SAlexey Bataev }
576ddfe1a6SAlexey Bataev namespace B {
586ddfe1a6SAlexey Bataev using A::x;
596ddfe1a6SAlexey Bataev }
606ddfe1a6SAlexey Bataev
main(int argc,char ** argv)6184d0b3efSAlexey Bataev int main(int argc, char **argv) {
6284d0b3efSAlexey Bataev const int d = 5;
6384d0b3efSAlexey Bataev const int da[5] = {0};
6484d0b3efSAlexey Bataev S4 e(4);
6584d0b3efSAlexey Bataev S5 g(5);
66*a914888bSAlexey Bataev int i, k;
6784d0b3efSAlexey Bataev int &j = i;
6884d0b3efSAlexey Bataev #pragma omp parallel sections shared // expected-error {{expected '(' after 'shared'}}
6984d0b3efSAlexey Bataev { foo(); }
7084d0b3efSAlexey Bataev #pragma omp parallel sections shared( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
7184d0b3efSAlexey Bataev { foo(); }
7284d0b3efSAlexey Bataev #pragma omp parallel sections shared() // expected-error {{expected expression}}
7384d0b3efSAlexey Bataev { foo(); }
7484d0b3efSAlexey Bataev #pragma omp parallel sections shared(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}
7584d0b3efSAlexey Bataev { foo(); }
76c5970623SAlexey Bataev #pragma omp parallel sections shared(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
7784d0b3efSAlexey Bataev { foo(); }
7884d0b3efSAlexey Bataev #pragma omp parallel sections shared(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}
7984d0b3efSAlexey Bataev { foo(); }
8084d0b3efSAlexey Bataev #pragma omp parallel sections shared(argc)
8184d0b3efSAlexey Bataev { foo(); }
8284d0b3efSAlexey Bataev #pragma omp parallel sections shared(S1) // expected-error {{'S1' does not refer to a value}}
8384d0b3efSAlexey Bataev { foo(); }
84*a914888bSAlexey Bataev #pragma omp parallel sections shared(a, b, c, d, f, k)
8584d0b3efSAlexey Bataev { foo(); }
8684d0b3efSAlexey Bataev #pragma omp parallel sections shared(argv[1]) // expected-error {{expected variable name}}
8784d0b3efSAlexey Bataev { foo(); }
8884d0b3efSAlexey Bataev #pragma omp parallel sections shared(ba)
8984d0b3efSAlexey Bataev { foo(); }
9084d0b3efSAlexey Bataev #pragma omp parallel sections shared(ca)
9184d0b3efSAlexey Bataev { foo(); }
9284d0b3efSAlexey Bataev #pragma omp parallel sections shared(da)
9384d0b3efSAlexey Bataev { foo(); }
9484d0b3efSAlexey Bataev #pragma omp parallel sections shared(e, g)
9584d0b3efSAlexey Bataev { foo(); }
966ddfe1a6SAlexey Bataev #pragma omp parallel sections shared(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be shared}}
9784d0b3efSAlexey Bataev { foo(); }
9884d0b3efSAlexey Bataev #pragma omp parallel sections private(i), shared(i) // expected-error {{private variable cannot be shared}} expected-note {{defined as private}}
9984d0b3efSAlexey Bataev { foo(); }
10084d0b3efSAlexey Bataev #pragma omp parallel sections firstprivate(i), shared(i) // expected-error {{firstprivate variable cannot be shared}} expected-note {{defined as firstprivate}}
10184d0b3efSAlexey Bataev { foo(); }
10284d0b3efSAlexey Bataev #pragma omp parallel sections private(i)
10384d0b3efSAlexey Bataev {
10484d0b3efSAlexey Bataev #pragma omp parallel sections shared(i)
10584d0b3efSAlexey Bataev {
10684d0b3efSAlexey Bataev #pragma omp parallel sections shared(j)
10784d0b3efSAlexey Bataev { foo(); }
10884d0b3efSAlexey Bataev }
10984d0b3efSAlexey Bataev }
11084d0b3efSAlexey Bataev #pragma omp parallel sections firstprivate(i)
11184d0b3efSAlexey Bataev {
11284d0b3efSAlexey Bataev #pragma omp parallel sections shared(i)
11384d0b3efSAlexey Bataev {
11484d0b3efSAlexey Bataev #pragma omp parallel sections shared(j)
11584d0b3efSAlexey Bataev { foo(); }
11684d0b3efSAlexey Bataev }
11784d0b3efSAlexey Bataev }
11884d0b3efSAlexey Bataev
11984d0b3efSAlexey Bataev return 0;
12084d0b3efSAlexey Bataev }
121