162 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp %s -Wuninitialized2 3// RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized4 5void foo() {6}7 8bool foobool(int argc) {9 return argc;10}11 12struct S1; // expected-note {{declared here}} expected-note 2 {{forward declaration of 'S1'}}13extern S1 a;14class S2 {15 mutable int a;16 17public:18 S2() : a(0) {}19 S2(const S2 &s2) : a(s2.a) {}20 static float S2s;21 static const float S2sc;22};23const float S2::S2sc = 0;24const S2 b;25const S2 ba[5];26class S3 {27 int a;28 S3 &operator=(const S3 &s3);29 30public:31 S3() : a(0) {} // expected-note 2 {{candidate constructor not viable: requires 0 arguments, but 1 was provided}}32 S3(S3 &s3) : a(s3.a) {} // expected-note 2 {{candidate constructor not viable: 1st argument ('const S3') would lose const qualifier}}33};34const S3 c;35const S3 ca[5];36extern const int f;37class S4 {38 int a;39 S4();40 S4(const S4 &s4);41public:42 S4(int v):a(v) { }43};44class S5 {45 int a;46 S5():a(0) {}47 S5(const S5 &s5):a(s5.a) { }48public:49 S5(int v):a(v) { }50};51class S6 {52 int a;53public:54 S6() : a(0) { }55};56 57extern int omp_default_mem_alloc;58 59S3 h;60#pragma omp threadprivate(h) // expected-note {{defined as threadprivate or thread local}}61 62int main(int argc, char **argv) {63 const int d = 5;64 const int da[5] = { 0 };65 S4 e(4);66 S5 g(5);67 S6 p;68 int i, z;69 int &j = i;70 #pragma omp distribute firstprivate // expected-error {{expected '(' after 'firstprivate'}}71 for (i = 0; i < argc; ++i) foo();72 #pragma omp distribute firstprivate ( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}73 for (i = 0; i < argc; ++i) foo();74 #pragma omp distribute firstprivate () // expected-error {{expected expression}}75 for (i = 0; i < argc; ++i) foo();76 #pragma omp target77 #pragma omp teams78 #pragma omp distribute firstprivate (argc // expected-error {{expected ')'}} expected-note {{to match this '('}}79 for (i = 0; i < argc; ++i) foo();80 #pragma omp target81 #pragma omp teams82 #pragma omp distribute firstprivate (argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}83 for (i = 0; i < argc; ++i) foo();84 #pragma omp target85 #pragma omp teams86 #pragma omp distribute firstprivate (argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}87 for (i = 0; i < argc; ++i) foo();88 #pragma omp target89 #pragma omp teams90 #pragma omp distribute firstprivate (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 '('}}91 for (i = 0; i < argc; ++i) foo();92 #pragma omp target93 #pragma omp teams94 #pragma omp distribute firstprivate (S1) // expected-error {{'S1' does not refer to a value}}95 for (i = 0; i < argc; ++i) foo();96 #pragma omp target97 #pragma omp teams98 #pragma omp distribute firstprivate (a, b, c, d, f) // expected-error {{firstprivate variable with incomplete type 'S1'}} 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}} expected-error {{incomplete type 'S1' where a complete type is required}} expected-error {{no matching constructor for initialization of 'S3'}}99 for (i = 0; i < argc; ++i) foo();100 #pragma omp target101 #pragma omp teams102 #pragma omp distribute firstprivate (argv[1]) // expected-error {{expected variable name}}103 for (i = 0; i < argc; ++i) foo();104 #pragma omp target105 #pragma omp teams106 #pragma omp distribute firstprivate(ba) // expected-warning {{type 'const S2[5]' is not trivially copyable and not guaranteed to be mapped correctly}}107 for (i = 0; i < argc; ++i) foo();108 #pragma omp target109 #pragma omp teams110 #pragma omp distribute firstprivate(ca) // expected-error {{no matching constructor for initialization of 'S3'}} expected-warning {{type 'const S3[5]' is not trivially copyable and not guaranteed to be mapped correctly}}111 for (i = 0; i < argc; ++i) foo();112 #pragma omp target113 #pragma omp teams114 #pragma omp distribute firstprivate(da, z)115 for (i = 0; i < argc; ++i) foo();116 #pragma omp target117 #pragma omp teams118 #pragma omp distribute firstprivate(S2::S2s)119 for (i = 0; i < argc; ++i) foo();120 #pragma omp target121 #pragma omp teams122 #pragma omp distribute firstprivate(S2::S2sc)123 for (i = 0; i < argc; ++i) foo();124 #pragma omp target125 #pragma omp teams126 #pragma omp distribute firstprivate(h) // expected-error {{threadprivate or thread local variable cannot be firstprivate}}127 for (i = 0; i < argc; ++i) foo();128 #pragma omp target129 #pragma omp teams130 #pragma omp distribute private(i), firstprivate(i) // expected-error {{private variable cannot be firstprivate}} expected-note{{defined as private}}131 for (i = 0; i < argc; ++i) foo();132 #pragma omp target133 #pragma omp teams shared(i)134 #pragma omp distribute firstprivate(i)135 for (j = 0; j < argc; ++j) foo();136 #pragma omp target137 #pragma omp teams shared(i)138 #pragma omp distribute firstprivate(i) // expected-note {{defined as firstprivate}}139 for (i = 0; i < argc; ++i) foo(); // expected-error {{loop iteration variable in the associated loop of 'omp distribute' directive may not be firstprivate, predetermined as private}}140 #pragma omp target141 #pragma omp teams private(argc) // expected-note {{defined as private}}142 #pragma omp distribute firstprivate(argc) // expected-error {{firstprivate variable must be shared}}143 for (i = 0; i < argc; ++i) foo();144 #pragma omp target145 #pragma omp teams reduction(+:argc) // expected-note {{defined as reduction}}146 #pragma omp distribute firstprivate(argc) // expected-error {{firstprivate variable must be shared}}147 for (i = 0; i < argc; ++i) foo();148 #pragma omp target149 #pragma omp teams150 #pragma omp distribute firstprivate(j)151 for (i = 0; i < argc; ++i) foo();152 #pragma omp target153 #pragma omp teams154 #pragma omp distribute lastprivate(argc), firstprivate(argc) // expected-error {{lastprivate variable cannot be firstprivate}} expected-note{{defined as lastprivate}}155 for (i = 0; i < argc; ++i) foo();156 #pragma omp target157 #pragma omp teams158#pragma omp distribute firstprivate(argc), lastprivate(argc) // expected-error {{firstprivate variable cannot be lastprivate}} expected-note{{defined as firstprivate}}159 for (i = 0; i < argc; ++i) foo();160 return 0;161}162