1b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s 2d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev 3d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevvoid foo() { 4d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev} 5d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev 6d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevbool foobool(int argc) { 7d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev return argc; 8d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev} 9d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev 10d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevstruct S1; // expected-note {{declared here}} expected-note{{forward declaration of 'S1'}} 11d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevextern S1 a; 12d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevclass S2 { 13d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev mutable int a; 14d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevpublic: 15d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S2():a(0) { } 16176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S2(const S2 &s2):a(s2.a) { } 17d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev static float S2s; 18d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev static const float S2sc; 19d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev}; 20d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevconst float S2::S2sc = 0; 21d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevconst S2 b; 22d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevconst S2 ba[5]; 23d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevclass S3 { 24d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev int a; 25d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevpublic: 26d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S3():a(0) { } 27176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S3(const S3 &s3):a(s3.a) { } 28d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev}; 29d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevconst S3 c; 30d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevconst S3 ca[5]; 31d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevextern const int f; 32176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesclass S4 { 33d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev int a; 34d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S4(); 35176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S4(const S4 &s4); // expected-note {{implicitly declared private here}} 36d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevpublic: 37d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S4(int v):a(v) { } 38d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev}; 39176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesclass S5 { 40d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev int a; 41d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S5():a(0) {} 42176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S5(const S5 &s5):a(s5.a) { } // expected-note {{implicitly declared private here}} 43d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevpublic: 44d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S5(int v):a(v) { } 45d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev}; 46d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev 47d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey BataevS3 h; 48d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev#pragma omp threadprivate(h) // expected-note {{defined as threadprivate or thread local}} 49d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev 5058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarnamespace A { 5158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainardouble x; 5258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}} 5358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} 5458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarnamespace B { 5558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarusing A::x; 5658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} 5758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 58d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevint main(int argc, char **argv) { 59d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev const int d = 5; 60d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev const int da[5] = { 0 }; 61176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S4 e(4); 62176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S5 g(5); 63d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev int i; 6487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar int &j = i; 6587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar static int m; 66d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate // expected-error {{expected '(' after 'firstprivate'}} 67d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 68d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate () // expected-error {{expected expression}} 69d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 70d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 71d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} 72d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate (argc) 73d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate (S1) // expected-error {{'S1' does not refer to a value}} 74d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate (a, b, c, d, f) // expected-error {{firstprivate variable with incomplete type 'S1'}} 75d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate (argv[1]) // expected-error {{expected variable name}} 76d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(ba) 77d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(ca) 78d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(da) 79d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(S2::S2s) 80d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(S2::S2sc) 81176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines #pragma omp parallel firstprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}} 8258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar #pragma omp parallel firstprivate(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be firstprivate}} 83d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel private(i), firstprivate(i) // expected-error {{private variable cannot be firstprivate}} expected-note{{defined as private}} 84d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev foo(); 85d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel shared(i) 86d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(i) 8787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar #pragma omp parallel firstprivate(j) 8887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar #pragma omp parallel firstprivate(m) 89d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev foo(); 90d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev 91d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev return 0; 92d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev} 93