1ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// RUN: %clang_cc1 -verify -fopenmp=libiomp5 %s 2ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 3ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesvoid foo() { 4ef8225444452a1486bd721f3285301fe84643b00Stephen Hines} 5ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 6ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesbool foobool(int argc) { 7ef8225444452a1486bd721f3285301fe84643b00Stephen Hines return argc; 8ef8225444452a1486bd721f3285301fe84643b00Stephen Hines} 9ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 10ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesstruct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}} 11ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesextern S1 a; 12ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesclass S2 { 13ef8225444452a1486bd721f3285301fe84643b00Stephen Hines mutable int a; 14ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 15ef8225444452a1486bd721f3285301fe84643b00Stephen Hinespublic: 16ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S2() : a(0) {} 17ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S2(S2 &s2) : a(s2.a) {} 18ef8225444452a1486bd721f3285301fe84643b00Stephen Hines static float S2s; 19ef8225444452a1486bd721f3285301fe84643b00Stephen Hines static const float S2sc; 20ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}; 21ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesconst float S2::S2sc = 0; 22ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesconst S2 b; 23ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesconst S2 ba[5]; 24ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesclass S3 { 25ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int a; 26ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S3 &operator=(const S3 &s3); 27ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 28ef8225444452a1486bd721f3285301fe84643b00Stephen Hinespublic: 29ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S3() : a(0) {} 30ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S3(S3 &s3) : a(s3.a) {} 31ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}; 32ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesconst S3 c; 33ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesconst S3 ca[5]; 34ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesextern const int f; 35ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesclass S4 { // expected-note 2 {{'S4' declared here}} 36ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int a; 37ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S4(); 38ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S4(const S4 &s4); 39ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 40ef8225444452a1486bd721f3285301fe84643b00Stephen Hinespublic: 41ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S4(int v) : a(v) {} 42ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}; 43ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesclass S5 { // expected-note 4 {{'S5' declared here}} 44ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int a; 45ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S5(const S5 &s5) : a(s5.a) {} 46ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 47ef8225444452a1486bd721f3285301fe84643b00Stephen Hinespublic: 48ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S5() : a(0) {} 49ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S5(int v) : a(v) {} 50ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}; 51ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesclass S6 { 52ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int a; 53ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S6() : a(0) {} 54ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 55ef8225444452a1486bd721f3285301fe84643b00Stephen Hinespublic: 56ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S6(const S6 &s6) : a(s6.a) {} 57ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S6(int v) : a(v) {} 58ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}; 59ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 60ef8225444452a1486bd721f3285301fe84643b00Stephen HinesS3 h; 61ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}} 62ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 63ef8225444452a1486bd721f3285301fe84643b00Stephen Hinestemplate <class I, class C> 64ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesint foomain(int argc, char **argv) { 65ef8225444452a1486bd721f3285301fe84643b00Stephen Hines I e(4); // expected-note {{'e' defined here}} 66ef8225444452a1486bd721f3285301fe84643b00Stephen Hines C g(5); // expected-note 2 {{'g' defined here}} 67ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int i; 68ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int &j = i; // expected-note {{'j' defined here}} 69ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate // expected-error {{expected '(' after 'firstprivate'}} 70ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 71ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 72ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 73ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 74ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 75ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate() // expected-error {{expected expression}} 76ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 77ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 78ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 79ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 80ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 81ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 82ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 83ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 84ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} 85ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 86ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 87ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(argc) 88ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 89ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 90ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(S1) // expected-error {{'S1' does not refer to a value}} 91ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 92ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 93ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(a, b) // expected-error {{firstprivate variable with incomplete type 'S1'}} 94ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 95ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 96ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(argv[1]) // expected-error {{expected variable name}} 97ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 98ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 99ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(e, g) // expected-error 2 {{firstprivate variable must have an accessible, unambiguous copy constructor}} 100ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 101ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 102ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}} 103ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 104ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 105ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for linear(i) // expected-error {{unexpected OpenMP clause 'linear' in directive '#pragma omp parallel for'}} 106ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 107ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 108ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 109ef8225444452a1486bd721f3285301fe84643b00Stephen Hines { 110ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int v = 0; 111ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int i; 112ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(i) 113ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) { 114ef8225444452a1486bd721f3285301fe84643b00Stephen Hines i = k; 115ef8225444452a1486bd721f3285301fe84643b00Stephen Hines v += i; 116ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 117ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 118ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel shared(i) 119ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel private(i) 120ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(j) // expected-error {{arguments of OpenMP clause 'firstprivate' cannot be of reference type}} 121ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 122ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 123ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(i) 124ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 125ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 126ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(g) firstprivate(g) // expected-error {{firstprivate variable must have an accessible, unambiguous copy constructor}} 127ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 128ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 129ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel private(i) 130ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(i) // expected-note {{defined as firstprivate}} 131ef8225444452a1486bd721f3285301fe84643b00Stephen 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}} 132ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 133ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel reduction(+ : i) 134ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(i) // expected-note {{defined as firstprivate}} 135ef8225444452a1486bd721f3285301fe84643b00Stephen 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}} 136ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 137ef8225444452a1486bd721f3285301fe84643b00Stephen Hines return 0; 138ef8225444452a1486bd721f3285301fe84643b00Stephen Hines} 139ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 140ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesint main(int argc, char **argv) { 141ef8225444452a1486bd721f3285301fe84643b00Stephen Hines const int d = 5; 142ef8225444452a1486bd721f3285301fe84643b00Stephen Hines const int da[5] = {0}; 143ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S4 e(4); // expected-note {{'e' defined here}} 144ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S5 g(5); // expected-note 2 {{'g' defined here}} 145ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S3 m; 146ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S6 n(2); 147ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int i; 148ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int &j = i; // expected-note {{'j' defined here}} 149ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate // expected-error {{expected '(' after 'firstprivate'}} 150ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 151ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 152ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 153ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 154ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 155ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate() // expected-error {{expected expression}} 156ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 157ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 158ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 159ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 160ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 161ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 162ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 163ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 164ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} 165ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 166ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 167ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(argc) 168ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 169ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 170ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(S1) // expected-error {{'S1' does not refer to a value}} 171ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 172ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 173ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(a, b, c, d, f) // expected-error {{firstprivate variable with incomplete type 'S1'}} 174ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 175ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 176ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(argv[1]) // expected-error {{expected variable name}} 177ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 178ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 179ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(2 * 2) // expected-error {{expected variable name}} 180ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 181ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 182ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(ba) // OK 183ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 184ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 185ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(ca) // OK 186ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 187ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 188ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(da) // OK 189ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 190ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 191ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int xa; 192ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(xa) // OK 193ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 194ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 195ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(S2::S2s) // OK 196ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 197ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 198ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(S2::S2sc) // OK 199ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 200ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 201ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for safelen(5) // expected-error {{unexpected OpenMP clause 'safelen' in directive '#pragma omp parallel for'}} 202ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 203ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 204ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(e, g) // expected-error 2 {{firstprivate variable must have an accessible, unambiguous copy constructor}} 205ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 206ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 207ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(m) // OK 208ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 209ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 210ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}} 211ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 212ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 213ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for private(xa), firstprivate(xa) // expected-error {{private variable cannot be firstprivate}} expected-note {{defined as private}} 214ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 215ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 216ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(i) // expected-note {{defined as firstprivate}} 217ef8225444452a1486bd721f3285301fe84643b00Stephen 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}} 218ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 219ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel shared(xa) 220ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(xa) // OK: may be firstprivate 221ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 222ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 223ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(j) // expected-error {{arguments of OpenMP clause 'firstprivate' cannot be of reference type}} 224ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 225ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 226ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(g) firstprivate(g) // expected-error {{firstprivate variable must have an accessible, unambiguous copy constructor}} 227ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 228ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 229ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(n) firstprivate(n) // OK 230ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 231ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 232ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 233ef8225444452a1486bd721f3285301fe84643b00Stephen Hines { 234ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int v = 0; 235ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int i; 236ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(i) 237ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) { 238ef8225444452a1486bd721f3285301fe84643b00Stephen Hines i = k; 239ef8225444452a1486bd721f3285301fe84643b00Stephen Hines v += i; 240ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 241ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 242ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel private(i) 243ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(i) // expected-note {{defined as firstprivate}} 244ef8225444452a1486bd721f3285301fe84643b00Stephen 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}} 245ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 246ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel reduction(+ : i) 247ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(i) // expected-note {{defined as firstprivate}} 248ef8225444452a1486bd721f3285301fe84643b00Stephen 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}} 249ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 250ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 251ef8225444452a1486bd721f3285301fe84643b00Stephen Hines return foomain<S4, S5>(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<S4, S5>' requested here}} 252ef8225444452a1486bd721f3285301fe84643b00Stephen Hines} 253