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: 29c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S3() : a(0) {} 30176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S3(const S3 &s3) : a(s3.a) {} 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; 68a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar int &j = i; 69c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate // expected-error {{expected '(' after 'firstprivate'}} 70c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 71c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 72c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 73c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 74c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 75c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate() // expected-error {{expected expression}} 76c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 77c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 78c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 79c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 80c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 81c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 82c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 83c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 84c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} 85c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 86c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 87c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(argc) 88c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 89c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 90c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(S1) // expected-error {{'S1' does not refer to a value}} 91c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 92c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 93c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(a, b) // expected-error {{firstprivate variable with incomplete type 'S1'}} 94c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 95c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 96c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(argv[1]) // expected-error {{expected variable name}} 97c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 98c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 99176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp parallel for firstprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}} 100c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 101c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 102c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}} 103c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 104c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 105c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 106c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines { 107c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int v = 0; 108c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int i; 109c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(i) 110c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) { 111c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines i = k; 112c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines v += i; 113c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 114c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 115c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel shared(i) 116c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel private(i) 117a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#pragma omp parallel for firstprivate(j) 118c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 119c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 120c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(i) 121c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 122c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 123176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp parallel for lastprivate(g) firstprivate(g) // expected-error {{calling a private constructor of class 'S5'}} 124c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 125c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 126c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel private(i) 127c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(i) // expected-note {{defined as firstprivate}} 128c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp parallel for' directive may not be firstprivate, predetermined as private}} 129c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 130c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel reduction(+ : i) 131c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(i) // expected-note {{defined as firstprivate}} 132c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp parallel for' directive may not be firstprivate, predetermined as private}} 133c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 134c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines return 0; 135c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 136c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 13758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarnamespace A { 13858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainardouble x; 13958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}} 14058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} 14158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarnamespace B { 14258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainarusing A::x; 14358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} 14458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 145c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesint main(int argc, char **argv) { 146c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines const int d = 5; 147c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines const int da[5] = {0}; 148176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S4 e(4); 149176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S5 g(5); 150c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S3 m; 151c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S6 n(2); 152c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int i; 153a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar int &j = i; 154c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate // expected-error {{expected '(' after 'firstprivate'}} 155c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 156c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 157c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 158c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 159c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 160c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate() // expected-error {{expected expression}} 161c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 162c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 163c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 164c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 165c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 166c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 167c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 168c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 169c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} 170c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 171c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 172c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(argc) 173c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 174c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 175c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(S1) // expected-error {{'S1' does not refer to a value}} 176c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 177c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 178c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(a, b, c, d, f) // expected-error {{firstprivate variable with incomplete type 'S1'}} 179c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 180c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 181c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(argv[1]) // expected-error {{expected variable name}} 182c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 183c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 184c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(2 * 2) // expected-error {{expected variable name}} 185c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 186c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 187c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(ba) // OK 188c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 189c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 190c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(ca) // OK 191c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 192c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 193c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(da) // OK 194c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 195c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 196c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int xa; 197c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(xa) // OK 198c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 199c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 200c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(S2::S2s) // OK 201c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 202c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 203c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(S2::S2sc) // OK 204c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 205c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 206c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for safelen(5) // expected-error {{unexpected OpenMP clause 'safelen' in directive '#pragma omp parallel for'}} 207c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 208c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 209176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp parallel for firstprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}} 210c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 211c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 212c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(m) // OK 213c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 214c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 21558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar#pragma omp parallel for firstprivate(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be firstprivate}} 216c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 217c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 218c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for private(xa), firstprivate(xa) // expected-error {{private variable cannot be firstprivate}} expected-note {{defined as private}} 219c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 220c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 221c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(i) // expected-note {{defined as firstprivate}} 222c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp parallel for' directive may not be firstprivate, predetermined as private}} 223c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 224c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel shared(xa) 225c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(xa) // OK: may be firstprivate 226c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 227c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 228a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#pragma omp parallel for firstprivate(j) 229c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 230c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 231176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp parallel for lastprivate(g) firstprivate(g) // expected-error {{calling a private constructor of class 'S5'}} 232c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 233c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 234c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for lastprivate(n) firstprivate(n) // OK 235c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 236c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 237c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 238c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines { 239c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int v = 0; 240c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int i; 241c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(i) 242c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) { 243c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines i = k; 244c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines v += i; 245c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 246c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 247c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel private(i) 248c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(i) // expected-note {{defined as firstprivate}} 249c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp parallel for' directive may not be firstprivate, predetermined as private}} 250c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 251c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel reduction(+ : i) 252c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel for firstprivate(i) // expected-note {{defined as firstprivate}} 253c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) // expected-error {{loop iteration variable in the associated loop of 'omp parallel for' directive may not be firstprivate, predetermined as private}} 254c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 255a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar static int si; 256a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#pragma omp parallel for firstprivate(si) // OK 257a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar for (i = 0; i < argc; ++i) 258a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar si = i + 1; 259c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 260c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines return foomain<S4, S5>(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<S4, S5>' requested here}} 261c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 262