brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.0 KiB · 1dc508b Raw
209 lines · cpp
1// RUN: %clang_cc1 -verify -fopenmp %s -Wuninitialized2 3// RUN: %clang_cc1 -verify -fopenmp-simd %s -Wuninitialized4 5void foo() {6}7 8struct S1; // expected-note 2 {{declared here}}9class S2 {10  mutable int a;11 12public:13  S2() : a(0) {}14  S2 &operator=(S2 &s2) { return *this; }15};16class S3 {17  int a;18 19public:20  S3() : a(0) {}21  S3 &operator=(S3 &s3) { return *this; }22};23class S4 {24  int a;25  S4();26  S4 &operator=(const S4 &s4); // expected-note 3 {{implicitly declared private here}}27 28public:29  S4(int v) : a(v) {}30};31class S5 {32  int a;33  S5() : a(0) {}34  S5 &operator=(const S5 &s5) { return *this; } // expected-note 3 {{implicitly declared private here}}35 36public:37  S5(int v) : a(v) {}38};39 40S2 k;41S3 h;42S4 l(3);43S5 m(4);44#pragma omp threadprivate(h, k, l, m)45 46template <class T, class C>47T tmain(T argc, C **argv) {48  T i, z;49  static T TA;50#pragma omp single copyprivate(z)51  ;52#pragma omp parallel53#pragma omp single copyprivate // expected-error {{expected '(' after 'copyprivate'}}54#pragma omp parallel55#pragma omp single copyprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}56#pragma omp parallel57#pragma omp single copyprivate() // expected-error {{expected expression}}58#pragma omp parallel59#pragma omp single copyprivate(k // expected-error {{expected ')'}} expected-note {{to match this '('}}60#pragma omp parallel61#pragma omp single copyprivate(h, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}62#pragma omp parallel63#pragma omp single copyprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}64#pragma omp parallel65#pragma omp single copyprivate(l) // expected-error 2 {{'operator=' is a private member of 'S4'}}66#pragma omp parallel67#pragma omp single copyprivate(S1) // expected-error {{'S1' does not refer to a value}}68#pragma omp parallel69#pragma omp single copyprivate(argv[1]) // expected-error {{expected variable name}}70#pragma omp parallel // expected-note {{implicitly determined as shared}}71#pragma omp single copyprivate(i) // expected-error {{copyprivate variable must be threadprivate or private in the enclosing context}}72#pragma omp parallel73#pragma omp single copyprivate(m) // expected-error 2 {{'operator=' is a private member of 'S5'}}74  foo();75#pragma omp parallel private(i)76  {77#pragma omp single copyprivate(i)78    foo();79  }80#pragma omp parallel shared(i) // expected-note {{defined as shared}}81  {82#pragma omp single copyprivate(i) // expected-error {{copyprivate variable must be threadprivate or private in the enclosing context}}83    foo();84  }85#pragma omp parallel private(i)86#pragma omp parallel default(shared) // expected-note {{implicitly determined as shared}}87  {88#pragma omp single copyprivate(i) // expected-error {{copyprivate variable must be threadprivate or private in the enclosing context}}89    foo();90  }91#pragma omp parallel private(i)92#pragma omp parallel // expected-note {{implicitly determined as shared}}93  {94#pragma omp single copyprivate(i) // expected-error {{copyprivate variable must be threadprivate or private in the enclosing context}}95    foo();96  }97#pragma omp parallel98#pragma omp single private(i) copyprivate(i) // expected-error {{private variable cannot be copyprivate}} expected-note {{defined as private}}99  foo();100#pragma omp parallel101#pragma omp single firstprivate(i) copyprivate(i) // expected-error {{firstprivate variable cannot be copyprivate}} expected-note {{defined as firstprivate}}102  foo();103#pragma omp parallel private(TA)104  {105#pragma omp single copyprivate(TA)106    TA = 99;107  }108 109  return T();110}111 112void bar(S4 a[2], int n, int b[n]) {113#pragma omp single copyprivate(a, b)114    foo();115}116 117namespace A {118double x;119#pragma omp threadprivate(x)120}121namespace B {122using A::x;123}124 125int main(int argc, char **argv) {126  int i, z;127  static int intA;128#pragma omp parallel129#pragma omp single copyprivate // expected-error {{expected '(' after 'copyprivate'}}130#pragma omp parallel131#pragma omp single copyprivate( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}132#pragma omp parallel133#pragma omp single copyprivate() // expected-error {{expected expression}}134#pragma omp parallel135#pragma omp single copyprivate(k // expected-error {{expected ')'}} expected-note {{to match this '('}}136#pragma omp parallel137#pragma omp single copyprivate(h, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}138#pragma omp parallel139#pragma omp single copyprivate(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}140#pragma omp parallel141#pragma omp single copyprivate(l, B::x) // expected-error {{'operator=' is a private member of 'S4'}}142#pragma omp parallel143#pragma omp single copyprivate(S1) // expected-error {{'S1' does not refer to a value}}144#pragma omp parallel145#pragma omp single copyprivate(argv[1]) // expected-error {{expected variable name}}146#pragma omp parallel // expected-note {{implicitly determined as shared}}147#pragma omp single copyprivate(i) // expected-error {{copyprivate variable must be threadprivate or private in the enclosing context}}148#pragma omp parallel149#pragma omp single copyprivate(m) // expected-error {{'operator=' is a private member of 'S5'}}150  foo();151#pragma omp parallel private(i, z)152  {153#pragma omp single copyprivate(i, z)154    foo();155  }156#pragma omp parallel shared(i) // expected-note {{defined as shared}}157  {158#pragma omp single copyprivate(i) // expected-error {{copyprivate variable must be threadprivate or private in the enclosing context}}159    foo();160  }161#pragma omp parallel private(i)162#pragma omp parallel default(shared) // expected-note {{implicitly determined as shared}}163  {164#pragma omp single copyprivate(i) // expected-error {{copyprivate variable must be threadprivate or private in the enclosing context}}165    foo();166  }167#pragma omp parallel private(i)168#pragma omp parallel // expected-note {{implicitly determined as shared}}169  {170#pragma omp single copyprivate(i) // expected-error {{copyprivate variable must be threadprivate or private in the enclosing context}}171    foo();172  }173#pragma omp parallel174#pragma omp single private(i) copyprivate(i) // expected-error {{private variable cannot be copyprivate}} expected-note {{defined as private}}175  foo();176#pragma omp parallel177#pragma omp single firstprivate(i) copyprivate(i) // expected-error {{firstprivate variable cannot be copyprivate}} expected-note {{defined as firstprivate}}178  foo();179#pragma omp single copyprivate(i) nowait // expected-error {{the 'copyprivate' clause must not be used with the 'nowait' clause}} expected-note {{'nowait' clause is here}}180  foo();181#pragma omp parallel private(intA)182  {183#pragma omp single copyprivate(intA)184    intA = 99;185  }186 187  return tmain(argc, argv); // expected-note {{in instantiation of function template specialization 'tmain<int, char>' requested here}}188}189 190extern void abort(void);191 192void193single(int a, int b) {194#pragma omp single copyprivate(a) copyprivate(b)195  {196    a = b = 5;197  }198 199  if (a != b)200    abort();201}202 203int parallel() {204#pragma omp parallel205  single(1, 2);206 207  return 0;208}209