brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.9 KiB · 0a0962e Raw
345 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 %s -Wuninitialized2// RUN: %clang_cc1 -verify -fopenmp %s -Wuninitialized3 4// RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=45 %s -Wuninitialized5// RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized6 7void foo() {8}9 10bool foobool(int argc) {11  return argc;12}13extern int omp_default_mem_alloc;14struct S1; // expected-note 2 {{declared here}} expected-note 3 {{forward declaration of 'S1'}}15extern S1 a;16class S2 {17  mutable int a;18 19public:20  S2() : a(0) {}21  S2(S2 &s2) : a(s2.a) {}22  const S2 &operator =(const S2&) const;23  S2 &operator =(const S2&);24  static float S2s; // expected-note {{static data member is predetermined as shared}}25  static const float S2sc; // expected-note {{'S2sc' declared here}}26};27const float S2::S2sc = 0;28const S2 b;29const S2 ba[5];30class S3 {31  int a;32  S3 &operator=(const S3 &s3); // expected-note {{implicitly declared private here}}33 34public:35  S3() : a(0) {}36  S3(S3 &s3) : a(s3.a) {}37};38const S3 c;         // expected-note {{'c' defined here}}39const S3 ca[5];     // expected-note {{'ca' defined here}}40extern const int f; // expected-note {{'f' declared here}}41class S4 {42  int a;43  S4();             // expected-note 3 {{implicitly declared private here}}44  S4(const S4 &s4);45 46public:47  S4(int v) : a(v) {}48};49class S5 {50  int a;51  S5() : a(0) {} // expected-note {{implicitly declared private here}}52 53public:54  S5(const S5 &s5) : a(s5.a) {}55  S5(int v) : a(v) {}56};57class S6 {58  int a;59  S6() : a(0) {} // expected-note {{implicitly declared private here}}60 61public:62  S6(const S6 &s6) : a(s6.a) {}63  S6(int v) : a(v) {}64};65 66S3 h;67#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}}68 69template <class I, class C>70int foomain(int argc, char **argv) {71  I e(4);72  I g(5);73  int i;74  int &j = i;75#pragma omp target76#pragma omp teams77#pragma omp distribute parallel for lastprivate // expected-error {{expected '(' after 'lastprivate'}}78  for (int k = 0; k < argc; ++k)79    ++k;80#pragma omp target81#pragma omp teams82#pragma omp distribute parallel for lastprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}83  for (int k = 0; k < argc; ++k)84    ++k;85#pragma omp target86#pragma omp teams87#pragma omp distribute parallel for lastprivate() // expected-error {{expected expression}}88  for (int k = 0; k < argc; ++k)89    ++k;90#pragma omp target91#pragma omp teams92#pragma omp distribute parallel for lastprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}93  for (int k = 0; k < argc; ++k)94    ++k;95#pragma omp target96#pragma omp teams97#pragma omp distribute parallel for lastprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}98  for (int k = 0; k < argc; ++k)99    ++k;100#pragma omp target101#pragma omp teams102#pragma omp distribute parallel for lastprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}103  for (int k = 0; k < argc; ++k)104    ++k;105#pragma omp target106#pragma omp teams107#pragma omp distribute parallel for lastprivate(argc) allocate , allocate(, allocate(omp_default , allocate(omp_default_mem_alloc, allocate(omp_default_mem_alloc:, allocate(omp_default_mem_alloc: argc, allocate(omp_default_mem_alloc: argv), allocate(argv) // expected-error {{expected '(' after 'allocate'}} expected-error 2 {{expected expression}} expected-error 2 {{expected ')'}} expected-error {{use of undeclared identifier 'omp_default'}} expected-note 2 {{to match this '('}}108  for (int k = 0; k < argc; ++k)109    ++k;110#pragma omp target111#pragma omp teams112#pragma omp distribute parallel for lastprivate(conditional: argc) lastprivate(conditional: // expected-error 2 {{use of undeclared identifier 'conditional'}} expected-error {{expected ')'}} expected-note {{to match this '('}}113  for (int k = 0; k < argc; ++k)114    ++k;115#pragma omp target116#pragma omp teams117#pragma omp distribute parallel for lastprivate(S1) // expected-error {{'S1' does not refer to a value}}118  for (int k = 0; k < argc; ++k)119    ++k;120#pragma omp target121#pragma omp teams122#pragma omp distribute parallel for lastprivate(a, b) // expected-error {{lastprivate variable with incomplete type 'S1'}} expected-warning {{type 'const S2' is not trivially copyable and not guaranteed to be mapped correctly}}123  for (int k = 0; k < argc; ++k)124    ++k;125#pragma omp target126#pragma omp teams127#pragma omp distribute parallel for lastprivate(argv[1]) // expected-error {{expected variable name}}128  for (int k = 0; k < argc; ++k)129    ++k;130#pragma omp target131#pragma omp teams132#pragma omp distribute parallel for lastprivate(e, g) // expected-error 2 {{calling a private constructor of class 'S4'}} expected-warning 2 {{type 'S4' is not trivially copyable and not guaranteed to be mapped correctly}}133  for (int k = 0; k < argc; ++k)134    ++k;135#pragma omp target136#pragma omp teams137#pragma omp distribute parallel for lastprivate(h) // expected-error {{threadprivate or thread local variable cannot be lastprivate}}138  for (int k = 0; k < argc; ++k)139    ++k;140 141  int v = 0;142#pragma omp target143#pragma omp teams144  {145#pragma omp distribute parallel for lastprivate(i)146    for (int k = 0; k < argc; ++k) {147      i = k;148      v += i;149    }150  }151#pragma omp target152#pragma omp teams private(i)153#pragma omp distribute parallel for lastprivate(j)154  for (int k = 0; k < argc; ++k)155    ++k;156#pragma omp target157#pragma omp teams158#pragma omp distribute parallel for lastprivate(i)159  for (int k = 0; k < argc; ++k)160    ++k;161  return 0;162}163 164void bar(S4 a[2]) {165#pragma omp target166#pragma omp teams167#pragma omp distribute parallel for lastprivate(a)168  for (int i = 0; i < 2; ++i)169    foo();170}171 172namespace A {173double x;174#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}}175}176namespace B {177using A::x;178}179 180int main(int argc, char **argv) {181  const int d = 5;       // expected-note {{'d' defined here}}182  const int da[5] = {0}; // expected-note {{'da' defined here}}183  S4 e(4);184  S5 g(5);185  S3 m;186  S6 n(2);187  int i;188  int &j = i;189#pragma omp target190#pragma omp teams191#pragma omp distribute parallel for lastprivate // expected-error {{expected '(' after 'lastprivate'}}192  for (i = 0; i < argc; ++i)193    foo();194#pragma omp target195#pragma omp teams196#pragma omp distribute parallel for lastprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}197  for (i = 0; i < argc; ++i)198    foo();199#pragma omp target200#pragma omp teams201#pragma omp distribute parallel for lastprivate() // expected-error {{expected expression}}202  for (i = 0; i < argc; ++i)203    foo();204#pragma omp target205#pragma omp teams206#pragma omp distribute parallel for lastprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}207  for (i = 0; i < argc; ++i)208    foo();209#pragma omp target210#pragma omp teams211#pragma omp distribute parallel for lastprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}212  for (i = 0; i < argc; ++i)213    foo();214#pragma omp target215#pragma omp teams216#pragma omp distribute parallel for lastprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}217  for (i = 0; i < argc; ++i)218    foo();219#pragma omp target220#pragma omp teams221#pragma omp distribute parallel for lastprivate(argc)222  for (i = 0; i < argc; ++i)223    foo();224#pragma omp target225#pragma omp teams226#pragma omp distribute parallel for lastprivate(S1) // expected-error {{'S1' does not refer to a value}}227  for (i = 0; i < argc; ++i)228    foo();229#pragma omp target230#pragma omp teams231#pragma omp distribute parallel for lastprivate(a, b, c, d, f) // expected-error {{lastprivate variable with incomplete type 'S1'}} expected-error 1 {{const-qualified variable without mutable fields cannot be lastprivate}} expected-error 2 {{const-qualified variable cannot be lastprivate}} 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}}232  for (i = 0; i < argc; ++i)233    foo();234#pragma omp target235#pragma omp teams236#pragma omp distribute parallel for lastprivate(argv[1]) // expected-error {{expected variable name}}237  for (i = 0; i < argc; ++i)238    foo();239#pragma omp target240#pragma omp teams241#pragma omp distribute parallel for lastprivate(2 * 2) // expected-error {{expected variable name}}242  for (i = 0; i < argc; ++i)243    foo();244#pragma omp target245#pragma omp teams246#pragma omp distribute parallel for lastprivate(ba) // expected-warning {{type 'const S2[5]' is not trivially copyable and not guaranteed to be mapped correctly}}247  for (i = 0; i < argc; ++i)248    foo();249#pragma omp target250#pragma omp teams251#pragma omp distribute parallel for lastprivate(ca) // expected-error {{const-qualified variable without mutable fields cannot be lastprivate}} expected-warning {{type 'const S3[5]' is not trivially copyable and not guaranteed to be mapped correctly}}252  for (i = 0; i < argc; ++i)253    foo();254#pragma omp target255#pragma omp teams256#pragma omp distribute parallel for lastprivate(da) // expected-error {{const-qualified variable cannot be lastprivate}}257  for (i = 0; i < argc; ++i)258    foo();259  int xa;260#pragma omp target261#pragma omp teams262#pragma omp distribute parallel for lastprivate(xa) // OK263  for (i = 0; i < argc; ++i)264    foo();265#pragma omp target266#pragma omp teams267#pragma omp distribute parallel for lastprivate(S2::S2s) // expected-error {{shared variable cannot be lastprivate}}268  for (i = 0; i < argc; ++i)269    foo();270#pragma omp target271#pragma omp teams272#pragma omp distribute parallel for lastprivate(S2::S2sc) // expected-error {{const-qualified variable cannot be lastprivate}}273  for (i = 0; i < argc; ++i)274    foo();275#pragma omp target276#pragma omp teams277#pragma omp distribute parallel for safelen(5) // expected-error {{unexpected OpenMP clause 'safelen' in directive '#pragma omp distribute parallel for'}}278  for (i = 0; i < argc; ++i)279    foo();280#pragma omp target281#pragma omp teams282#pragma omp distribute parallel for lastprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}} 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}}283  for (i = 0; i < argc; ++i)284    foo();285#pragma omp target286#pragma omp teams287#pragma omp distribute parallel for lastprivate(m) // expected-error {{'operator=' is a private member of 'S3'}} expected-warning {{type 'S3' is not trivially copyable and not guaranteed to be mapped correctly}}288  for (i = 0; i < argc; ++i)289    foo();290#pragma omp target291#pragma omp teams292#pragma omp distribute parallel for lastprivate(h) // expected-error {{threadprivate or thread local variable cannot be lastprivate}}293  for (i = 0; i < argc; ++i)294    foo();295#pragma omp target296#pragma omp teams297#pragma omp distribute parallel for lastprivate(B::x) // expected-error {{threadprivate or thread local variable cannot be lastprivate}}298  for (i = 0; i < argc; ++i)299    foo();300#pragma omp target301#pragma omp teams302#pragma omp distribute parallel for private(xa), lastprivate(xa) // expected-error {{private variable cannot be lastprivate}} expected-note {{defined as private}}303  for (i = 0; i < argc; ++i)304    foo();305#pragma omp target306#pragma omp teams307#pragma omp distribute parallel for lastprivate(i)308  for (i = 0; i < argc; ++i)309    foo();310#pragma omp target311#pragma omp teams312#pragma omp distribute parallel for lastprivate(xa)313  for (i = 0; i < argc; ++i)314    foo();315#pragma omp target316#pragma omp teams317#pragma omp distribute parallel for lastprivate(xa)318  for (i = 0; i < argc; ++i)319    foo();320#pragma omp target321#pragma omp teams322#pragma omp distribute parallel for lastprivate(j)323  for (i = 0; i < argc; ++i)324    foo();325// expected-error@+3 {{firstprivate variable cannot be lastprivate}} expected-note@+3 {{defined as firstprivate}}326#pragma omp target327#pragma omp teams328#pragma omp distribute parallel for firstprivate(m) lastprivate(m) // expected-warning {{type 'S3' is not trivially copyable and not guaranteed to be mapped correctly}}329  for (i = 0; i < argc; ++i)330    foo();331// expected-error@+3 {{lastprivate variable cannot be firstprivate}} expected-note@+3 {{defined as lastprivate}}332#pragma omp target333#pragma omp teams334#pragma omp distribute parallel for lastprivate(n) firstprivate(n) // expected-error {{calling a private constructor of class 'S6'}} expected-warning {{type 'S6' is not trivially copyable and not guaranteed to be mapped correctly}}335  for (i = 0; i < argc; ++i)336    foo();337  static int si;338#pragma omp target339#pragma omp teams340#pragma omp distribute parallel for lastprivate(si) // OK341  for (i = 0; i < argc; ++i)342    si = i + 1;343  return foomain<S4, S5>(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<S4, S5>' requested here}}344}345