1b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar// RUN: %clang_cc1 -verify -fopenmp %s 2c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 3c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesvoid foo() { 4c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 5c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 6c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesbool foobool(int argc) { 7c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines return argc; 8c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 9c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 10c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesstruct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}} 11c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesextern S1 a; 12c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesclass S2 { 13c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines mutable int a; 14c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 15c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinespublic: 16c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S2() : a(0) {} 17176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S2(const S2 &s2) : a(s2.a) {} 18c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines static float S2s; 19c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines static const float S2sc; 20c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines}; 21c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesconst float S2::S2sc = 0; 22c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesconst S2 b; 23c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesconst S2 ba[5]; 24c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesclass S3 { 25c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int a; 26c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S3 &operator=(const S3 &s3); 27c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 28c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinespublic: 2958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar S3() : a(0) {} // expected-note 2 {{candidate constructor not viable: requires 0 arguments, but 1 was provided}} 3058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar S3(S3 &s3) : a(s3.a) {} // expected-note 2 {{candidate constructor not viable: 1st argument ('const S3') would lose const qualifier}} 31c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines}; 32c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesconst S3 c; 33c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesconst S3 ca[5]; 34c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesextern const int f; 35176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesclass S4 { 36c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int a; 37c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S4(); 38176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S4(const S4 &s4); // expected-note 2 {{implicitly declared private here}} 39c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 40c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinespublic: 41c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S4(int v) : a(v) {} 42c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines}; 43176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesclass S5 { 44c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int a; 45176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S5(const S5 &s5) : a(s5.a) {} // expected-note 4 {{implicitly declared private here}} 46c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 47c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinespublic: 48c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S5() : a(0) {} 49c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S5(int v) : a(v) {} 50c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines}; 51c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesclass S6 { 52c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int a; 53c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S6() : a(0) {} 54c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 55c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinespublic: 56c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S6(const S6 &s6) : a(s6.a) {} 57c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S6(int v) : a(v) {} 58c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines}; 59c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 60c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen HinesS3 h; 61c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}} 62c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 63c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinestemplate <class I, class C> 64c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesint foomain(int argc, char **argv) { 65176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines I e(4); 66176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines C g(5); 67c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int i; 6887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar int &j = i; 69c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 70c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate // expected-error {{expected '(' after 'firstprivate'}} 71c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 72c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 73c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 74c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 75c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 76c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 77c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 78c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate() // expected-error {{expected expression}} 79c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 80c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 81c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 82c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 83c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 84c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 85c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 86c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 87c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 88c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 89c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 90c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} 91c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 92c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 93c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 94c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argc) 95c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 96c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 97c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 98c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(S1) // expected-error {{'S1' does not refer to a value}} 99c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 100c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 101c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 102c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(a, b) // expected-error {{firstprivate variable with incomplete type 'S1'}} 103c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 104c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 105c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 106c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argv[1]) // expected-error {{expected variable name}} 107c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 108c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 109c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 110176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp for firstprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}} 111c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 112c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 113c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 114c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}} 115c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 116c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 117c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 118c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines { 119c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int v = 0; 120c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int i; // expected-note {{variable with automatic storage duration is predetermined as private; perhaps you forget to enclose 'omp for' directive into a parallel or another task region?}} 12187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp for firstprivate(i) // expected-error {{firstprivate variable must be shared}} 122c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) { 123c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines i = k; 124c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines v += i; 125c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 126c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 127c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel shared(i) 128c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel private(i) 12987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp for firstprivate(j) 130c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 131c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 132c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 133c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(i) 134c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 135c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 136c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 137176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp for lastprivate(g) firstprivate(g) // expected-error {{calling a private constructor of class 'S5'}} 138c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 139c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 140c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel private(i) // expected-note {{defined as private}} 141c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(i) // expected-error {{firstprivate variable must be shared}} 142c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 143c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 144c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel reduction(+ : i) // expected-note {{defined as reduction}} 145c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(i) // expected-error {{firstprivate variable must be shared}} 1464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar for (int k = 0; k < argc; ++k) 147c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 148c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines return 0; 149c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 150c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 151b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainarvoid bar(S4 a[2]) { 152b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar#pragma omp parallel 153b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar#pragma omp for firstprivate(a) 154b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar for (int i = 0; i < 2; ++i) 155b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar foo(); 156b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar} 157b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 15858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarnamespace A { 15958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainardouble x; 16058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}} 16158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} 16258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarnamespace B { 16358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarusing A::x; 16458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} 16558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 166c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesint main(int argc, char **argv) { 167c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines const int d = 5; 168c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines const int da[5] = {0}; 169176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S4 e(4); 170176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S5 g(5); 171c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S3 m; 172c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S6 n(2); 173c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int i; 17487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar int &j = i; 175c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 176c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate // expected-error {{expected '(' after 'firstprivate'}} 177c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 178c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 179c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 180c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 181c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 182c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 183c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 184c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate() // expected-error {{expected expression}} 185c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 186c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 187c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 188c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 189c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 190c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 191c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 192c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 193c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 194c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 195c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 196c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} 197c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 198c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 199c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 200c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argc) 201c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 202c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 203c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 204c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(S1) // expected-error {{'S1' does not refer to a value}} 205c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 206c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 207c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 20858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp for firstprivate(a, b, c, d, f) // expected-error {{firstprivate variable with incomplete type 'S1'}} expected-error {{no matching constructor for initialization of 'S3'}} 209c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 210c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 211c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 212c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argv[1]) // expected-error {{expected variable name}} 213c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 214c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 215c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 216c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(2 * 2) // expected-error {{expected variable name}} 217c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 218c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 219c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 220c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(ba) // OK 221c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 222c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 223c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 22458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp for firstprivate(ca) // expected-error {{no matching constructor for initialization of 'S3'}} 225c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 226c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 227c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 228c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(da) // OK 229c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 230c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 231c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int xa; 232c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 233c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(xa) // OK 234c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 235c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 236c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 237c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(S2::S2s) // OK 238c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 239c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 240c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 241c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(S2::S2sc) // OK 242c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 243c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 244c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 245c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for safelen(5) // expected-error {{unexpected OpenMP clause 'safelen' in directive '#pragma omp for'}} 246c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 247c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 248c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 249176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp for firstprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}} 250c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 251c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 252c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 253c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(m) // OK 254c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 255c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 256c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 257c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}} 258c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 259c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 260c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 261c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for private(xa), firstprivate(xa) // expected-error {{private variable cannot be firstprivate}} expected-note {{defined as private}} 262c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 263c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 264c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 265c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(i) // expected-note {{defined as firstprivate}} 266c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp for' directive may not be firstprivate, predetermined as private}} 267c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 268c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel shared(xa) 269c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(xa) // OK: may be firstprivate 270c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 271c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 272c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 27387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp for firstprivate(j) 274c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 275c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 276c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 277176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp for lastprivate(g) firstprivate(g) // expected-error {{calling a private constructor of class 'S5'}} 278c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 279c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 280c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 281c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for lastprivate(n) firstprivate(n) // OK 282c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 283c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 284c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 285c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines { 286c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int v = 0; 287c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int i; // expected-note {{variable with automatic storage duration is predetermined as private; perhaps you forget to enclose 'omp for' directive into a parallel or another task region?}} 28887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp for firstprivate(i) // expected-error {{firstprivate variable must be shared}} 289c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) { 290c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines i = k; 291c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines v += i; 292c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 293c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 294c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel private(i) // expected-note {{defined as private}} 295c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(i) // expected-error {{firstprivate variable must be shared}} 296c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 297c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 298c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel reduction(+ : i) // expected-note {{defined as reduction}} 299c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(i) // expected-error {{firstprivate variable must be shared}} 300c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 301c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 30258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp parallel 30358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp for firstprivate(B::x) // expected-error {{threadprivate or thread local variable cannot be firstprivate}} 30458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar for (i = 0; i < argc; ++i) 30558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar foo(); 30687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar static int si; 30787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar#pragma omp for firstprivate(si) // OK 30887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar for (i = 0; i < argc; ++i) 30987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar si = i + 1; 310c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 311c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines return foomain<S4, S5>(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<S4, S5>' requested here}} 312c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 313176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 314