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 70ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate // expected-error {{expected '(' after 'firstprivate'}} 71ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 72ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 73ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 74ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 75ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 76ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 77ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 78ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate() // expected-error {{expected expression}} 79ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 80ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 81ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 82ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 83ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 84ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 85ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 86ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 87ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 88ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 89ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 90ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} 91ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 92ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 93ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 94ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(argc) 95ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 96ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 97ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 98ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(S1) // expected-error {{'S1' does not refer to a value}} 99ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 100ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 101ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 102ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(a, b) // expected-error {{firstprivate variable with incomplete type 'S1'}} 103ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 104ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 105ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 106ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(argv[1]) // expected-error {{expected variable name}} 107ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 108ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 109ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 110ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(e, g) // expected-error 2 {{firstprivate variable must have an accessible, unambiguous copy constructor}} 111ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 112ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 113ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 114ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}} 115ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 116ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 117ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 118ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for linear(i) // expected-error {{unexpected OpenMP clause 'linear' in directive '#pragma omp for'}} 119ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 120ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 121ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 122ef8225444452a1486bd721f3285301fe84643b00Stephen Hines { 123ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int v = 0; 124ef8225444452a1486bd721f3285301fe84643b00Stephen 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?}} 125ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(i) // expected-error {{private variable cannot be firstprivate}} 126ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) { 127ef8225444452a1486bd721f3285301fe84643b00Stephen Hines i = k; 128ef8225444452a1486bd721f3285301fe84643b00Stephen Hines v += i; 129ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 130ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 131ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel shared(i) 132ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel private(i) 133ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(j) // expected-error {{arguments of OpenMP clause 'firstprivate' cannot be of reference type}} 134ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 135ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 136ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 137ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(i) 138ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) 139ef8225444452a1486bd721f3285301fe84643b00Stephen Hines ++k; 140ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 141ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for lastprivate(g) firstprivate(g) // expected-error {{firstprivate variable must have an accessible, unambiguous copy constructor}} 142ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 143ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 144ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel private(i) // expected-note {{defined as private}} 145ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(i) // expected-error {{firstprivate variable must be shared}} 146ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 147ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 148ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel reduction(+ : i) // expected-note {{defined as reduction}} 149ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(i) // expected-error {{firstprivate variable must be shared}} 150ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 151ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 152ef8225444452a1486bd721f3285301fe84643b00Stephen Hines return 0; 153ef8225444452a1486bd721f3285301fe84643b00Stephen Hines} 154ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 155ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesint main(int argc, char **argv) { 156ef8225444452a1486bd721f3285301fe84643b00Stephen Hines const int d = 5; 157ef8225444452a1486bd721f3285301fe84643b00Stephen Hines const int da[5] = {0}; 158ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S4 e(4); // expected-note {{'e' defined here}} 159ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S5 g(5); // expected-note 2 {{'g' defined here}} 160ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S3 m; 161ef8225444452a1486bd721f3285301fe84643b00Stephen Hines S6 n(2); 162ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int i; 163ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int &j = i; // expected-note {{'j' defined here}} 164ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 165ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate // expected-error {{expected '(' after 'firstprivate'}} 166ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 167ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 168ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 169ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 170ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 171ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 172ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 173ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate() // expected-error {{expected expression}} 174ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 175ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 176ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 177ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} 178ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 179ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 180ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 181ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}} 182ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 183ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 184ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 185ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}} 186ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 187ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 188ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 189ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(argc) 190ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 191ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 192ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 193ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(S1) // expected-error {{'S1' does not refer to a value}} 194ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 195ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 196ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 197ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(a, b, c, d, f) // expected-error {{firstprivate variable with incomplete type 'S1'}} 198ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 199ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 200ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 201ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(argv[1]) // expected-error {{expected variable name}} 202ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 203ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 204ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 205ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(2 * 2) // expected-error {{expected variable name}} 206ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 207ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 208ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 209ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(ba) // OK 210ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 211ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 212ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 213ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(ca) // OK 214ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 215ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 216ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 217ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(da) // OK 218ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 219ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 220ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int xa; 221ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 222ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(xa) // OK 223ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 224ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 225ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 226ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(S2::S2s) // OK 227ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 228ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 229ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 230ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(S2::S2sc) // OK 231ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 232ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 233ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 234ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for safelen(5) // expected-error {{unexpected OpenMP clause 'safelen' in directive '#pragma omp for'}} 235ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 236ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 237ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 238ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(e, g) // expected-error 2 {{firstprivate variable must have an accessible, unambiguous copy constructor}} 239ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 240ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 241ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 242ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(m) // OK 243ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 244ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 245ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 246ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}} 247ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 248ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 249ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 250ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for private(xa), firstprivate(xa) // expected-error {{private variable cannot be firstprivate}} expected-note {{defined as private}} 251ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 252ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 253ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 254ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(i) // expected-note {{defined as firstprivate}} 255ef8225444452a1486bd721f3285301fe84643b00Stephen 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}} 256ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 257ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel shared(xa) 258ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(xa) // OK: may be firstprivate 259ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 260ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 261ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 262ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(j) // expected-error {{arguments of OpenMP clause 'firstprivate' cannot be of reference type}} 263ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 264ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 265ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 266ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for lastprivate(g) firstprivate(g) // expected-error {{firstprivate variable must have an accessible, unambiguous copy constructor}} 267ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 268ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 269ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 270ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for lastprivate(n) firstprivate(n) // OK 271ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 272ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 273ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel 274ef8225444452a1486bd721f3285301fe84643b00Stephen Hines { 275ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int v = 0; 276ef8225444452a1486bd721f3285301fe84643b00Stephen 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?}} 277ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(i) // expected-error {{private variable cannot be firstprivate}} 278ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (int k = 0; k < argc; ++k) { 279ef8225444452a1486bd721f3285301fe84643b00Stephen Hines i = k; 280ef8225444452a1486bd721f3285301fe84643b00Stephen Hines v += i; 281ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 282ef8225444452a1486bd721f3285301fe84643b00Stephen Hines } 283ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel private(i) // expected-note {{defined as private}} 284ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(i) // expected-error {{firstprivate variable must be shared}} 285ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 286ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 287ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp parallel reduction(+ : i) // expected-note {{defined as reduction}} 288ef8225444452a1486bd721f3285301fe84643b00Stephen Hines#pragma omp for firstprivate(i) // expected-error {{firstprivate variable must be shared}} 289ef8225444452a1486bd721f3285301fe84643b00Stephen Hines for (i = 0; i < argc; ++i) 290ef8225444452a1486bd721f3285301fe84643b00Stephen Hines foo(); 291ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 292ef8225444452a1486bd721f3285301fe84643b00Stephen Hines return foomain<S4, S5>(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<S4, S5>' requested here}} 293ef8225444452a1486bd721f3285301fe84643b00Stephen Hines} 294