233 lines · cpp
1// RUN: %clang_cc1 -verify=expected,omp45 -fopenmp-version=45 -fopenmp %s -Wuninitialized2// RUN: %clang_cc1 -verify=expected,omp51 -fopenmp %s -Wuninitialized3 4// RUN: %clang_cc1 -verify=expected,omp45 -fopenmp-version=45 -fopenmp-simd %s -Wuninitialized5// RUN: %clang_cc1 -verify=expected,omp51 -fopenmp-simd %s -Wuninitialized6 7extern int omp_default_mem_alloc;8void foo() {9}10 11bool foobool(int argc) {12 return argc;13}14 15struct S1; // expected-note 2 {{declared here}} expected-note 2 {{forward declaration of 'S1'}}16extern S1 a;17class S2 {18 mutable int a;19 20public:21 S2() : a(0) {}22 S2(S2 &s2) : a(s2.a) {}23 const S2 &operator=(const S2 &) const;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 {{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};57 58S3 h;59#pragma omp threadprivate(h) // expected-note 2 {{defined as threadprivate or thread local}}60 61namespace A {62double x;63#pragma omp threadprivate(x) // expected-note {{defined as threadprivate or thread local}}64}65namespace B {66using A::x;67}68 69template <class I, class C>70int foomain(I argc, C **argv) {71 I e(4);72 I g(5);73 int i;74 int &j = i;75#pragma omp simd lastprivate // expected-error {{expected '(' after 'lastprivate'}}76 for (int k = 0; k < argc; ++k)77 ++k;78#pragma omp simd lastprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}79 for (int k = 0; k < argc; ++k)80 ++k;81#pragma omp simd lastprivate() // expected-error {{expected expression}}82 for (int k = 0; k < argc; ++k)83 ++k;84#pragma omp simd lastprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}85 for (int k = 0; k < argc; ++k)86 ++k;87#pragma omp simd lastprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}88 for (int k = 0; k < argc; ++k)89 ++k;90#pragma omp simd lastprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}91 for (int k = 0; k < argc; ++k)92 ++k;93#pragma omp simd 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 '('}}94 for (int k = 0; k < argc; ++k)95 ++k;96#pragma omp simd lastprivate(conditional: argc,g) lastprivate(conditional: // omp51-error {{expected expression}} omp45-error 2 {{use of undeclared identifier 'conditional'}} expected-error {{expected ')'}} expected-note {{to match this '('}}97 for (int k = 0; k < argc; ++k)98 ++k;99#pragma omp simd lastprivate(foo:argc) // omp51-error {{expected 'conditional' in OpenMP clause 'lastprivate'}} omp45-error {{expected ',' or ')' in 'lastprivate' clause}} omp45-error {{expected ')'}} omp45-error {{expected variable name}} omp45-note {{to match this '('}}100 for (int k = 0; k < argc; ++k)101 ++k;102#pragma omp simd lastprivate(S1) // expected-error {{'S1' does not refer to a value}}103 for (int k = 0; k < argc; ++k)104 ++k;105#pragma omp simd lastprivate(a, b) // expected-error {{lastprivate variable with incomplete type 'S1'}}106 for (int k = 0; k < argc; ++k)107 ++k;108#pragma omp simd lastprivate(argv[1]) // expected-error {{expected variable name}}109 for (int k = 0; k < argc; ++k)110 ++k;111#pragma omp simd lastprivate(e, g)112 for (int k = 0; k < argc; ++k)113 ++k;114#pragma omp simd lastprivate(h, B::x) // expected-error 2 {{threadprivate or thread local variable cannot be lastprivate}}115 for (int k = 0; k < argc; ++k)116 ++k;117#pragma omp simd firstprivate(i) // expected-error {{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp simd'}}118 for (int k = 0; k < argc; ++k)119 ++k;120#pragma omp parallel121 {122 int v = 0;123 int i;124#pragma omp simd lastprivate(i)125 for (int k = 0; k < argc; ++k) {126 i = k;127 v += i;128 }129 }130#pragma omp parallel shared(i)131#pragma omp parallel private(i)132#pragma omp simd lastprivate(j)133 for (int k = 0; k < argc; ++k)134 ++k;135#pragma omp simd lastprivate(i)136 for (int k = 0; k < argc; ++k)137 ++k;138 return 0;139}140 141int main(int argc, char **argv) {142 const int d = 5; // expected-note {{'d' defined here}}143 const int da[5] = {0}; // expected-note {{'da' defined here}}144 S4 e(4);145 S5 g(5);146 S3 m;147 int i;148 int &j = i;149#pragma omp simd lastprivate // expected-error {{expected '(' after 'lastprivate'}}150 for (i = 0; i < argc; ++i)151 foo();152#pragma omp simd lastprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}153 for (i = 0; i < argc; ++i)154 foo();155#pragma omp simd lastprivate() // expected-error {{expected expression}}156 for (i = 0; i < argc; ++i)157 foo();158#pragma omp simd lastprivate(argc // expected-error {{expected ')'}} expected-note {{to match this '('}}159 for (i = 0; i < argc; ++i)160 foo();161#pragma omp simd lastprivate(argc, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}162 for (i = 0; i < argc; ++i)163 foo();164#pragma omp simd lastprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}165 for (i = 0; i < argc; ++i)166 foo();167#pragma omp simd lastprivate(argc)168 for (i = 0; i < argc; ++i)169 foo();170#pragma omp simd lastprivate(S1) // expected-error {{'S1' does not refer to a value}}171 for (i = 0; i < argc; ++i)172 foo();173#pragma omp simd 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}}174 for (i = 0; i < argc; ++i)175 foo();176#pragma omp simd lastprivate(argv[1]) // expected-error {{expected variable name}}177 for (i = 0; i < argc; ++i)178 foo();179#pragma omp simd lastprivate(2 * 2) // expected-error {{expected variable name}}180 for (i = 0; i < argc; ++i)181 foo();182#pragma omp simd lastprivate(ba)183 for (i = 0; i < argc; ++i)184 foo();185#pragma omp simd lastprivate(ca) // expected-error {{const-qualified variable without mutable fields cannot be lastprivate}}186 for (i = 0; i < argc; ++i)187 foo();188#pragma omp simd lastprivate(da) // expected-error {{const-qualified variable cannot be lastprivate}}189 for (i = 0; i < argc; ++i)190 foo();191 int xa;192#pragma omp simd lastprivate(xa) // OK193 for (i = 0; i < argc; ++i)194 foo();195#pragma omp simd lastprivate(S2::S2s) // expected-error {{shared variable cannot be lastprivate}}196 for (i = 0; i < argc; ++i)197 foo();198#pragma omp simd lastprivate(S2::S2sc) // expected-error {{const-qualified variable cannot be lastprivate}}199 for (i = 0; i < argc; ++i)200 foo();201#pragma omp simd firstprivate(g) // expected-error {{unexpected OpenMP clause 'firstprivate' in directive '#pragma omp simd'}}202 for (i = 0; i < argc; ++i)203 foo();204#pragma omp simd lastprivate(e, g) // expected-error {{calling a private constructor of class 'S4'}} expected-error {{calling a private constructor of class 'S5'}}205 for (i = 0; i < argc; ++i)206 foo();207#pragma omp simd lastprivate(m) // expected-error {{'operator=' is a private member of 'S3'}}208 for (i = 0; i < argc; ++i)209 foo();210#pragma omp simd lastprivate(h) // expected-error {{threadprivate or thread local variable cannot be lastprivate}}211 for (i = 0; i < argc; ++i)212 foo();213#pragma omp simd private(xa), lastprivate(xa) // expected-error {{private variable cannot be lastprivate}} expected-note {{defined as private}}214 for (i = 0; i < argc; ++i)215 foo();216#pragma omp simd lastprivate(i) // omp45-note {{defined as lastprivate}}217 for (i = 0; i < argc; ++i) // omp45-error {{loop iteration variable in the associated loop of 'omp simd' directive may not be lastprivate, predetermined as linear}}218 foo();219#pragma omp parallel private(xa)220#pragma omp simd lastprivate(xa) // OK: may be lastprivate221 for (i = 0; i < argc; ++i)222 foo();223#pragma omp parallel224#pragma omp simd lastprivate(j)225 for (i = 0; i < argc; ++i)226 foo();227 static int t;228#pragma omp simd lastprivate(t) // OK229 for (i = 0; i < argc; ++i)230 foo();231 return foomain(argc, argv); // expected-note {{in instantiation of function template specialization 'foomain<int, char>' requested here}}232}233