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; // expected-note {{static data member is predetermined as shared}} 19ef8225444452a1486bd721f3285301fe84643b00Stephen Hines static const float S2sc; 20ef8225444452a1486bd721f3285301fe84643b00Stephen Hines}; 21ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesconst float S2::S2sc = 0; // expected-note {{static data member is predetermined as shared}} 22ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesconst S2 b; 23ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesconst S2 ba[5]; 24ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesclass S3 { // expected-note 2 {{'S3' declared here}} 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; // expected-note {{global variable is predetermined as shared}} 33ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesconst S3 ca[5]; // expected-note {{global variable is predetermined as shared}} 34ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesextern const int f; // expected-note {{global variable is predetermined as shared}} 35ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesclass S4 { // expected-note 3 {{'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 {{'S5' declared here}} 44ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int a; 45ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S5() : a(0) {} 46ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 47ef8225444452a1486bd721f3285301fe84643b00Stephen Hinespublic: 48ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S5(const S5 &s5) : a(s5.a) {} 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 I g(5); // expected-note {{'g' defined here}} 67ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int i; 68ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int &j = i; // expected-note {{'j' defined here}} 69ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate // expected-error {{expected '(' after 'lastprivate'}} 70ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 71ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 72ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate( // 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 lastprivate() // expected-error {{expected expression}} 76ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 77ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 78ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(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 lastprivate(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 lastprivate(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 lastprivate(argc) 88ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 89ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 90ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(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 lastprivate(a, b) // expected-error {{lastprivate variable with incomplete type 'S1'}} 94ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 95ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 96ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(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 lastprivate(e, g) // expected-error 2 {{lastprivate variable must have an accessible, unambiguous default constructor}} 100ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 101ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 102ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(h) // expected-error {{threadprivate or thread local variable cannot be lastprivate}} 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 lastprivate(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 lastprivate(j) // expected-error {{arguments of OpenMP clause 'lastprivate' cannot be of reference type}} 121ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 122ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 123ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(i) 124ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 125ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 126ef8225444452a1486bd721f3285301fe84643b00Stephen Hines return 0; 127ef8225444452a1486bd721f3285301fe84643b00Stephen Hines} 128ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 129ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesint main(int argc, char **argv) { 130ef8225444452a1486bd721f3285301fe84643b00Stephen Hines const int d = 5; // expected-note {{constant variable is predetermined as shared}} 131ef8225444452a1486bd721f3285301fe84643b00Stephen Hines const int da[5] = {0}; // expected-note {{constant variable is predetermined as shared}} 132ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S4 e(4); // expected-note {{'e' defined here}} 133ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S5 g(5); // expected-note {{'g' defined here}} 134ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S3 m; // expected-note 2 {{'m' defined here}} 135ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S6 n(2); 136ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int i; 137ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int &j = i; // expected-note {{'j' defined here}} 138ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate // expected-error {{expected '(' after 'lastprivate'}} 139ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 140ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 141ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 142ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 143ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 144ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate() // expected-error {{expected expression}} 145ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 146ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 147ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 148ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 149ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 150ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 151ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 152ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 153ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} 154ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 155ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 156ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(argc) 157ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 158ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 159ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(S1) // expected-error {{'S1' does not refer to a value}} 160ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 161ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 162ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(a, b, c, d, f) // expected-error {{lastprivate variable with incomplete type 'S1'}} expected-error 3 {{shared variable cannot be lastprivate}} 163ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 164ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 165ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(argv[1]) // expected-error {{expected variable name}} 166ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 167ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 168ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(2 * 2) // expected-error {{expected variable name}} 169ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 170ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 171ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(ba) 172ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 173ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 174ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(ca) // expected-error {{shared variable cannot be lastprivate}} 175ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 176ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 177ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(da) // expected-error {{shared variable cannot be lastprivate}} 178ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 179ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 180ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int xa; 181ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(xa) // OK 182ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 183ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 184ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(S2::S2s) // expected-error {{shared variable cannot be lastprivate}} 185ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 186ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 187ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(S2::S2sc) // expected-error {{shared variable cannot be lastprivate}} 188ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 189ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 190ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for safelen(5) // expected-error {{unexpected OpenMP clause 'safelen' in directive '#pragma omp parallel for'}} 191ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 192ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 193ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(e, g) // expected-error 2 {{lastprivate variable must have an accessible, unambiguous default constructor}} 194ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 195ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 196ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(m) // expected-error {{lastprivate variable must have an accessible, unambiguous copy assignment operator}} 197ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 198ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 199ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(h) // expected-error {{threadprivate or thread local variable cannot be lastprivate}} 200ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 201ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 202ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for private(xa), lastprivate(xa) // expected-error {{private variable cannot be lastprivate}} expected-note {{defined as private}} 203ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 204ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 205ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(i) 206ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 207ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 208ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel private(xa) 209ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(xa) 210ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 211ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 212ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel reduction(+ : xa) 213ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(xa) 214ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 215ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 216ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(j) // expected-error {{arguments of OpenMP clause 'lastprivate' cannot be of reference type}} 217ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 218ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 219ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for firstprivate(m) lastprivate(m) // expected-error {{lastprivate variable must have an accessible, unambiguous copy assignment operator}} 220ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 221ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 222ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel for lastprivate(n) firstprivate(n) // OK 223ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 224ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 225ef8225444452a1486bd721f3285301fe84643b00Stephen Hines return foomain<S4, S5>(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<S4, S5>' requested here}} 226ef8225444452a1486bd721f3285301fe84643b00Stephen Hines} 227