399 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 %s -Wuninitialized2 3// RUN: %clang_cc1 -verify -fopenmp-simd -ferror-limit 100 %s -Wuninitialized4 5 6struct S1; // expected-note 2 {{declared here}} // expected-note 2 {{forward declaration of 'S1'}}7extern S1 a;8class S2 {9 mutable int a;10public:11 S2():a(0) { }12 S2(S2 &s2):a(s2.a) { }13};14const S2 b;15const S2 ba[5];16class S3 {17 int a;18public:19 S3():a(0) { }20 S3(S3 &s3):a(s3.a) { }21};22const S3 c;23const S3 ca[5];24extern const int f;25class S4 {26 int a;27 S4();28 S4(const S4 &s4);29public:30 S4(int v):a(v) { }31};32class S5 {33 int a;34 S5():a(0) {}35 S5(const S5 &s5):a(s5.a) { }36public:37 S5(int v):a(v) { }38};39 40S3 h;41#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}}42 43namespace A {44double x;45#pragma omp threadprivate(x) // expected-note 2 {{defined as threadprivate or thread local}}46}47namespace B {48using A::x;49}50 51template <class T, typename S, int N>52T tmain(T argc, S **argv) {53 const int d = 5;54 const int da[5] = { 0 };55 S4 e(4);56 S5 g(5);57 int i, z;58 int &j = i;59 int acc = 0;60 int n = 1000;61 62#pragma omp target63#pragma omp teams64#pragma omp distribute parallel for simd shared // expected-error {{expected '(' after 'shared'}}65 for(int k = 0 ; k < n ; k++) {66 acc++;67 }68 69#pragma omp target70#pragma omp teams71#pragma omp distribute parallel for simd shared ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}72 for(int k = 0 ; k < n ; k++) {73 acc++;74 }75 76#pragma omp target77#pragma omp teams78#pragma omp distribute parallel for simd shared () // expected-error {{expected expression}}79 for(int k = 0 ; k < n ; k++) {80 acc++;81 }82 83#pragma omp target84#pragma omp teams85#pragma omp distribute parallel for simd shared (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}86 for(int k = 0 ; k < n ; k++) {87 acc++;88 }89 90#pragma omp target91#pragma omp teams92#pragma omp distribute parallel for simd shared (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}93 for(int k = 0 ; k < n ; k++) {94 acc++;95 }96 97#pragma omp target98#pragma omp teams99#pragma omp distribute parallel for simd shared (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}100 for(int k = 0 ; k < n ; k++) {101 acc++;102 }103 104#pragma omp target105#pragma omp teams106#pragma omp distribute parallel for simd shared (argc, z)107 for(int k = 0 ; k < n ; k++) {108 acc++;109 }110 111#pragma omp target112#pragma omp teams113#pragma omp distribute parallel for simd shared (S1) // expected-error {{'S1' does not refer to a value}}114 for(int k = 0 ; k < n ; k++) {115 acc++;116 }117 118#pragma omp target119#pragma omp teams120#pragma omp distribute parallel for simd shared (a, b, c, d, f) // expected-error {{incomplete type 'S1' where a complete type is required}} expected-warning {{type 'const S2' is not trivially copyable and not guaranteed to be mapped correctly}} expected-warning {{type 'const S3' is not trivially copyable and not guaranteed to be mapped correctly}}121 for(int k = 0 ; k < n ; k++) {122 acc++;123 }124 125#pragma omp target126#pragma omp teams127#pragma omp distribute parallel for simd shared (argv[1]) // expected-error {{expected variable name}}128 for(int k = 0 ; k < n ; k++) {129 acc++;130 }131 132#pragma omp target133#pragma omp teams134#pragma omp distribute parallel for simd shared(ba) // expected-warning {{type 'const S2[5]' is not trivially copyable and not guaranteed to be mapped correctly}}135 for(int k = 0 ; k < n ; k++) {136 acc++;137 }138 139#pragma omp target140#pragma omp teams141#pragma omp distribute parallel for simd shared(ca) // expected-warning {{type 'const S3[5]' is not trivially copyable and not guaranteed to be mapped correctly}}142 for(int k = 0 ; k < n ; k++) {143 acc++;144 }145 146#pragma omp target147#pragma omp teams148#pragma omp distribute parallel for simd shared(da)149 for(int k = 0 ; k < n ; k++) {150 acc++;151 }152 153#pragma omp target154#pragma omp teams155#pragma omp distribute parallel for simd shared(e, g) // expected-warning {{type 'S4' is not trivially copyable and not guaranteed to be mapped correctly}} expected-warning {{type 'S5' is not trivially copyable and not guaranteed to be mapped correctly}}156 for(int k = 0 ; k < n ; k++) {157 acc++;158 }159 160#pragma omp target161#pragma omp teams162#pragma omp distribute parallel for simd shared(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be shared}}163 for(int k = 0 ; k < n ; k++) {164 acc++;165 }166 167#pragma omp target168#pragma omp teams169#pragma omp distribute parallel for simd private(i), shared(i) // expected-error {{private variable cannot be shared}} expected-note {{defined as private}}170 for(int k = 0 ; k < n ; k++) {171 acc++;172 }173 174#pragma omp target175#pragma omp teams176#pragma omp distribute parallel for simd firstprivate(i), shared(i) // expected-error {{firstprivate variable cannot be shared}} expected-note {{defined as firstprivate}}177 for(int k = 0 ; k < n ; k++) {178 acc++;179 }180 181#pragma omp target182#pragma omp teams183#pragma omp distribute parallel for simd private(i)184 for(int k = 0 ; k < n ; k++) {185 acc++;186 }187 188#pragma omp target189#pragma omp teams190#pragma omp distribute parallel for simd shared(i)191 for(int k = 0 ; k < n ; k++) {192 acc++;193 }194 195#pragma omp target196#pragma omp teams197#pragma omp distribute parallel for simd shared(j)198 for(int k = 0 ; k < n ; k++) {199 acc++;200 }201 202#pragma omp target203#pragma omp teams204#pragma omp distribute parallel for simd firstprivate(i)205 for(int k = 0 ; k < n ; k++) {206 acc++;207 }208 209#pragma omp target210#pragma omp teams211#pragma omp distribute parallel for simd shared(i)212 for(int k = 0 ; k < n ; k++) {213 acc++;214 }215 216#pragma omp target217#pragma omp teams218#pragma omp distribute parallel for simd shared(j)219 for(int k = 0 ; k < n ; k++) {220 acc++;221 }222return T();223}224 225 226int main(int argc, char **argv) {227 const int d = 5;228 const int da[5] = { 0 };229 S4 e(4);230 S5 g(5);231 int i, z;232 int &j = i;233 int acc = 0;234 int n = argc;235 236#pragma omp target237#pragma omp teams238#pragma omp distribute parallel for simd shared // expected-error {{expected '(' after 'shared'}}239 for(int k = 0 ; k < n ; k++) {240 acc++;241 }242 243#pragma omp target244#pragma omp teams245#pragma omp distribute parallel for simd shared ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}246 for(int k = 0 ; k < n ; k++) {247 acc++;248 }249 250#pragma omp target251#pragma omp teams252#pragma omp distribute parallel for simd shared () // expected-error {{expected expression}}253 for(int k = 0 ; k < n ; k++) {254 acc++;255 }256 257#pragma omp target258#pragma omp teams259#pragma omp distribute parallel for simd shared (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}260 for(int k = 0 ; k < n ; k++) {261 acc++;262 }263 264#pragma omp target265#pragma omp teams266#pragma omp distribute parallel for simd shared (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}267 for(int k = 0 ; k < n ; k++) {268 acc++;269 }270 271#pragma omp target272#pragma omp teams273#pragma omp distribute parallel for simd shared (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}274 for(int k = 0 ; k < n ; k++) {275 acc++;276 }277 278#pragma omp target279#pragma omp teams280#pragma omp distribute parallel for simd shared (argc, z)281 for(int k = 0 ; k < n ; k++) {282 acc++;283 }284 285#pragma omp target286#pragma omp teams287#pragma omp distribute parallel for simd shared (S1) // expected-error {{'S1' does not refer to a value}}288 for(int k = 0 ; k < n ; k++) {289 acc++;290 }291 292#pragma omp target293#pragma omp teams294#pragma omp distribute parallel for simd shared (a, b, c, d, f) // expected-error {{incomplete type 'S1' where a complete type is required}} expected-warning {{type 'const S2' is not trivially copyable and not guaranteed to be mapped correctly}} expected-warning {{type 'const S3' is not trivially copyable and not guaranteed to be mapped correctly}}295 for(int k = 0 ; k < n ; k++) {296 acc++;297 }298 299#pragma omp target300#pragma omp teams301#pragma omp distribute parallel for simd shared (argv[1]) // expected-error {{expected variable name}}302 for(int k = 0 ; k < n ; k++) {303 acc++;304 }305 306#pragma omp target307#pragma omp teams308#pragma omp distribute parallel for simd shared(ba) // expected-warning {{type 'const S2[5]' is not trivially copyable and not guaranteed to be mapped correctly}}309 for(int k = 0 ; k < n ; k++) {310 acc++;311 }312 313#pragma omp target314#pragma omp teams315#pragma omp distribute parallel for simd shared(ca) // expected-warning {{type 'const S3[5]' is not trivially copyable and not guaranteed to be mapped correctly}}316 for(int k = 0 ; k < n ; k++) {317 acc++;318 }319 320#pragma omp target321#pragma omp teams322#pragma omp distribute parallel for simd shared(da)323 for(int k = 0 ; k < n ; k++) {324 acc++;325 }326 327#pragma omp target328#pragma omp teams329#pragma omp distribute parallel for simd shared(e, g) // expected-warning {{type 'S4' is not trivially copyable and not guaranteed to be mapped correctly}} expected-warning {{type 'S5' is not trivially copyable and not guaranteed to be mapped correctly}}330 for(int k = 0 ; k < n ; k++) {331 acc++;332 }333 334#pragma omp target335#pragma omp teams336#pragma omp distribute parallel for simd shared(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be shared}}337 for(int k = 0 ; k < n ; k++) {338 acc++;339 }340 341#pragma omp target342#pragma omp teams343#pragma omp distribute parallel for simd private(i), shared(i) // expected-error {{private variable cannot be shared}} expected-note {{defined as private}}344 for(int k = 0 ; k < n ; k++) {345 acc++;346 }347 348#pragma omp target349#pragma omp teams350#pragma omp distribute parallel for simd firstprivate(i), shared(i) // expected-error {{firstprivate variable cannot be shared}} expected-note {{defined as firstprivate}}351 for(int k = 0 ; k < n ; k++) {352 acc++;353 }354 355#pragma omp target356#pragma omp teams357#pragma omp distribute parallel for simd private(i)358 for(int k = 0 ; k < n ; k++) {359 acc++;360 }361 362#pragma omp target363#pragma omp teams364#pragma omp distribute parallel for simd shared(i)365 for(int k = 0 ; k < n ; k++) {366 acc++;367 }368 369#pragma omp target370#pragma omp teams371#pragma omp distribute parallel for simd shared(j)372 for(int k = 0 ; k < n ; k++) {373 acc++;374 }375 376#pragma omp target377#pragma omp teams378#pragma omp distribute parallel for simd firstprivate(i)379 for(int k = 0 ; k < n ; k++) {380 acc++;381 }382 383#pragma omp target384#pragma omp teams385#pragma omp distribute parallel for simd shared(i)386 for(int k = 0 ; k < n ; k++) {387 acc++;388 }389 390#pragma omp target391#pragma omp teams392#pragma omp distribute parallel for simd shared(j)393 for(int k = 0 ; k < n ; k++) {394 acc++;395 }396 397return tmain<int, char, 1000>(argc, argv); // expected-note {{in instantiation of function template specialization 'tmain<int, char, 1000>' requested here}}398}399