1b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s 2176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 3176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid foo() { 4176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 5176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 6176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesbool foobool(int argc) { 7176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return argc; 8176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 9176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainartemplate <typename T> 114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct S { 124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar T b; 134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar S(T a, T c) { 144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar#pragma omp task default(none) firstprivate(a, b) 154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar a = b = c; // expected-error {{variable 'c' must have explicitly specified data sharing attributes}} 164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 194967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarS<int> s(3, 4); // expected-note {{in instantiation of member function 'S<int>::S' requested here}} 204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 21176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct S1; // expected-note {{declared here}} expected-note{{forward declaration of 'S1'}} 22176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesextern S1 a; 23176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesclass S2 { 24176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines mutable int a; 25176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 26176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinespublic: 27176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S2() : a(0) {} 28176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S2(const S2 &s2) : a(s2.a) {} 29176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines static float S2s; 30176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines static const float S2sc; 31176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}; 32176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesconst float S2::S2sc = 0; 33176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesconst S2 b; 34176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesconst S2 ba[5]; 35176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesclass S3 { 36176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines int a; 37176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 38176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinespublic: 39176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S3() : a(0) {} 40176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S3(const S3 &s3) : a(s3.a) {} 41176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}; 42176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesconst S3 c; 43176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesconst S3 ca[5]; 44176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesextern const int f; 45176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesclass S4 { 46176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines int a; 47176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S4(); 48176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S4(const S4 &s4); // expected-note 2 {{implicitly declared private here}} 49176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 50176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinespublic: 51176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S4(int v) : a(v) {} 52176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}; 53176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesclass S5 { 54176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines int a; 55176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S5() : a(0) {} 56176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S5(const S5 &s5) : a(s5.a) {} // expected-note 2 {{implicitly declared private here}} 57176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 58176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinespublic: 59176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S5(int v) : a(v) {} 60176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}; 61176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 62176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesS3 h; 63176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp threadprivate(h) // expected-note {{defined as threadprivate or thread local}} 64176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 65b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainarvoid bar(int n, int b[n]) { 66b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar#pragma omp task firstprivate(b) 67b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar foo(); 68b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar} 69b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 7058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarnamespace A { 7158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainardouble x; 7258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}} 7358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} 7458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarnamespace B { 7558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarusing A::x; 7658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} 7758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 78176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesint main(int argc, char **argv) { 79176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines const int d = 5; 80176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines const int da[5] = {0}; 81176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S4 e(4); 82176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S5 g(5); 83176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines int i; 8487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar int &j = i; 8587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar static int m; 86176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate // expected-error {{expected '(' after 'firstprivate'}} 87176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 88176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate() // expected-error {{expected expression}} 89176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 90176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 91176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} 92176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate(argc) 93176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate(S1) // expected-error {{'S1' does not refer to a value}} 94176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate(a, b, c, d, f) // expected-error {{firstprivate variable with incomplete type 'S1'}} 95176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate(argv[1]) // expected-error {{expected variable name}} 96176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate(ba) 97176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate(ca) 98176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate(da) 99176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate(S2::S2s) 100176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate(S2::S2sc) 101176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate(e, g) // expected-error 2 {{calling a private constructor of class 'S4'}} expected-error 2 {{calling a private constructor of class 'S5'}} 10258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp task firstprivate(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be firstprivate}} 103176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task private(i), firstprivate(i) // expected-error {{private variable cannot be firstprivate}} expected-note{{defined as private}} 104176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines foo(); 105176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task shared(i) 106176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp task firstprivate(i) 10787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp task firstprivate(j) 10887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp task firstprivate(m) // OK 109176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines foo(); 110176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 111176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return 0; 112176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 113