Home | History | Annotate | Download | only in OpenMP
      1 // RUN: %clang_cc1 -verify -fopenmp -ferror-limit 100 -o - %s
      2 
      3 void foo() {
      4 }
      5 
      6 bool foobool(int argc) {
      7   return argc;
      8 }
      9 
     10 struct S1; // expected-note {{declared here}}
     11 class S2 {
     12   mutable int a;
     13 
     14 public:
     15   S2() : a(0) {}
     16   S2 &operator=(S2 &s2) { return *this; }
     17 };
     18 class S3 {
     19   int a;
     20 
     21 public:
     22   S3() : a(0) {}
     23   S3 &operator=(S3 &s3) { return *this; }
     24 };
     25 class S4 {
     26   int a;
     27   S4();
     28   S4 &operator=(const S4 &s4); // expected-note {{implicitly declared private here}}
     29 
     30 public:
     31   S4(int v) : a(v) {}
     32 };
     33 class S5 {
     34   int a;
     35   S5() : a(0) {}
     36   S5 &operator=(const S5 &s5) { return *this; } // expected-note {{implicitly declared private here}}
     37 
     38 public:
     39   S5(int v) : a(v) {}
     40 };
     41 template <class T>
     42 class ST {
     43 public:
     44   static T s;
     45 };
     46 
     47 S2 k;
     48 S3 h;
     49 S4 l(3);
     50 S5 m(4);
     51 #pragma omp threadprivate(h, k, l, m)
     52 
     53 namespace A {
     54 double x;
     55 #pragma omp threadprivate(x)
     56 }
     57 namespace B {
     58 using A::x;
     59 }
     60 
     61 int main(int argc, char **argv) {
     62   int i;
     63 #pragma omp parallel sections copyin // expected-error {{expected '(' after 'copyin'}}
     64   {
     65     foo();
     66   }
     67 #pragma omp parallel sections copyin( // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
     68   {
     69     foo();
     70   }
     71 #pragma omp parallel sections copyin() // expected-error {{expected expression}}
     72   {
     73     foo();
     74   }
     75 #pragma omp parallel sections copyin(k // expected-error {{expected ')'}} expected-note {{to match this '('}}
     76   {
     77     foo();
     78   }
     79 #pragma omp parallel sections copyin(h, // expected-error {{expected expression}} expected-error {{expected ')'}} expected-note {{to match this '('}}
     80   {
     81     foo();
     82   }
     83 #pragma omp parallel sections copyin(argc > 0 ? argv[1] : argv[2]) // expected-error {{expected variable name}}
     84   {
     85     foo();
     86   }
     87 #pragma omp parallel sections copyin(l) // expected-error {{'operator=' is a private member of 'S4'}}
     88   {
     89     foo();
     90   }
     91 #pragma omp parallel sections copyin(S1) // expected-error {{'S1' does not refer to a value}}
     92   {
     93     foo();
     94   }
     95 #pragma omp parallel sections copyin(argv[1]) // expected-error {{expected variable name}}
     96   {
     97     foo();
     98   }
     99 #pragma omp parallel sections copyin(i) // expected-error {{copyin variable must be threadprivate}}
    100   {
    101     foo();
    102   }
    103 #pragma omp parallel sections copyin(m) // expected-error {{'operator=' is a private member of 'S5'}}
    104   {
    105     foo();
    106   }
    107 #pragma omp parallel sections copyin(ST < int > ::s, B::x) // expected-error {{copyin variable must be threadprivate}}
    108   {
    109     foo();
    110   }
    111 
    112   return 0;
    113 }
    114