1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// RUN: %clang_cc1 -verify -fopenmp=libiomp5 -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) { } 16d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S2(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) { } 27d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S3(S3 &s3):a(s3.a) { } 28d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev}; 29d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevconst S3 c; 30d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevconst S3 ca[5]; 31d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevextern const int f; 32d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevclass S4 { // expected-note {{'S4' declared here}} 33d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev int a; 34d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S4(); 35d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S4(const S4 &s4); 36d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevpublic: 37d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S4(int v):a(v) { } 38d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev}; 39d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevclass S5 { // expected-note {{'S5' declared here}} 40d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev int a; 41d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S5():a(0) {} 42d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S5(const S5 &s5):a(s5.a) { } 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 50d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataevint main(int argc, char **argv) { 51d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev const int d = 5; 52d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev const int da[5] = { 0 }; 53d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S4 e(4); // expected-note {{'e' defined here}} 54d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev S5 g(5); // expected-note {{'g' defined here}} 55d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev int i; 56d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev int &j = i; // expected-note {{'j' defined here}} 57d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate // expected-error {{expected '(' after 'firstprivate'}} 58d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 59d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate () // expected-error {{expected expression}} 60d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate (argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 61d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 62d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} 63d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate (argc) 64d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate (S1) // expected-error {{'S1' does not refer to a value}} 65d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate (a, b, c, d, f) // expected-error {{firstprivate variable with incomplete type 'S1'}} 66d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate (argv[1]) // expected-error {{expected variable name}} 67d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(ba) 68d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(ca) 69d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(da) 70d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(S2::S2s) 71d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(S2::S2sc) 72d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(e, g) // expected-error 2 {{firstprivate variable must have an accessible, unambiguous copy constructor}} 73d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}} 74d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel private(i), firstprivate(i) // expected-error {{private variable cannot be firstprivate}} expected-note{{defined as private}} 75d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev foo(); 76d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel shared(i) 77d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(i) 78d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev #pragma omp parallel firstprivate(j) // expected-error {{arguments of OpenMP clause 'firstprivate' cannot be of reference type}} 79d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev foo(); 80d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev 81d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev return 0; 82d195bc38fd424b0c928e3c354038a8ca6e2ccac3Alexey Bataev} 83