for_firstprivate_messages.cpp revision 176edba5311f6eff0cad2631449885ddf4fbc9ea
1c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines// RUN: %clang_cc1 -verify -fopenmp=libiomp5 %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: 29176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S3() : a(0) {} // expected-note {{candidate constructor not viable: requires 0 arguments, but 1 was provided}} 30176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S3(S3 &s3) : a(s3.a) {} // expected-note {{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; 68c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int &j = i; // expected-note {{'j' defined here}} 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#pragma omp for linear(i) // expected-error {{unexpected OpenMP clause 'linear' in directive '#pragma omp for'}} 119c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 120c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 121c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 122c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines { 123c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int v = 0; 124c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen 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?}} 125c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(i) // expected-error {{private variable cannot be firstprivate}} 126c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) { 127c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines i = k; 128c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines v += i; 129c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 130c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 131c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel shared(i) 132c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel private(i) 133c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(j) // expected-error {{arguments of OpenMP clause 'firstprivate' cannot be of reference type}} 134c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 135c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 136c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 137c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(i) 138c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) 139c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines ++k; 140c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 141176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp for lastprivate(g) firstprivate(g) // expected-error {{calling a private constructor of class 'S5'}} 142c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 143c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 144c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel private(i) // expected-note {{defined as private}} 145c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(i) // expected-error {{firstprivate variable must be shared}} 146c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 147c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 148c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel reduction(+ : i) // expected-note {{defined as reduction}} 149c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(i) // expected-error {{firstprivate variable must be shared}} 150c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 151c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 152c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines return 0; 153c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 154c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 155c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hinesint main(int argc, char **argv) { 156c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines const int d = 5; 157c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines const int da[5] = {0}; 158176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S4 e(4); 159176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines S5 g(5); 160c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S3 m; 161c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines S6 n(2); 162c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int i; 163c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int &j = i; // expected-note {{'j' defined here}} 164c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 165c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate // expected-error {{expected '(' after 'firstprivate'}} 166c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 167c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 168c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 169c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 170c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 171c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 172c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 173c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate() // expected-error {{expected expression}} 174c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 175c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 176c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 177c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 178c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 179c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 180c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 181c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 182c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 183c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 184c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 185c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} 186c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 187c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 188c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 189c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argc) 190c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 191c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 192c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 193c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(S1) // expected-error {{'S1' does not refer to a value}} 194c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 195c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 196c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 197176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#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 'const S3'}} 198c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 199c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 200c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 201c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(argv[1]) // expected-error {{expected variable name}} 202c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 203c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 204c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 205c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(2 * 2) // expected-error {{expected variable name}} 206c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 207c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 208c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 209c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(ba) // OK 210c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 211c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 212c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 213c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(ca) // OK 214c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 215c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 216c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 217c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(da) // OK 218c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 219c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 220c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int xa; 221c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 222c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(xa) // OK 223c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 224c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 225c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 226c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(S2::S2s) // OK 227c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 228c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 229c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 230c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(S2::S2sc) // OK 231c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 232c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 233c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 234c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for safelen(5) // expected-error {{unexpected OpenMP clause 'safelen' in directive '#pragma omp for'}} 235c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 236c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 237c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 238176edba5311f6eff0cad2631449885ddf4fbc9eaStephen 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'}} 239c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 240c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 241c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 242c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(m) // OK 243c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 244c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 245c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 246c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}} 247c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 248c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 249c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 250c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for private(xa), firstprivate(xa) // expected-error {{private variable cannot be firstprivate}} expected-note {{defined as private}} 251c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 252c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 253c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 254c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(i) // expected-note {{defined as firstprivate}} 255c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen 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}} 256c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 257c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel shared(xa) 258c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(xa) // OK: may be firstprivate 259c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 260c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 261c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 262c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(j) // expected-error {{arguments of OpenMP clause 'firstprivate' cannot be of reference type}} 263c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 264c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 265c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 266176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#pragma omp for lastprivate(g) firstprivate(g) // expected-error {{calling a private constructor of class 'S5'}} 267c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 268c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 269c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 270c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for lastprivate(n) firstprivate(n) // OK 271c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 272c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 273c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel 274c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines { 275c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines int v = 0; 276c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen 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?}} 277c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(i) // expected-error {{private variable cannot be firstprivate}} 278c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (int k = 0; k < argc; ++k) { 279c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines i = k; 280c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines v += i; 281c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 282c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines } 283c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel private(i) // expected-note {{defined as private}} 284c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(i) // expected-error {{firstprivate variable must be shared}} 285c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 286c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 287c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp parallel reduction(+ : i) // expected-note {{defined as reduction}} 288c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines#pragma omp for firstprivate(i) // expected-error {{firstprivate variable must be shared}} 289c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines for (i = 0; i < argc; ++i) 290c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines foo(); 291c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 292c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines return foomain<S4, S5>(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<S4, S5>' requested here}} 293c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 294176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 295