Home | History | Annotate | Download | only in OpenMP
      1 // RUN: %clang_cc1 -std=c++11 -verify -fopenmp -ferror-limit 200 %s
      2 struct ST {
      3   int *a;
      4 };
      5 typedef int arr[10];
      6 typedef ST STarr[10];
      7 struct SA {
      8   const int d = 5;
      9   const int da[5] = { 0 };
     10   ST e;
     11   ST g[10];
     12   STarr &rg = g;
     13   int i;
     14   int &j = i;
     15   int *k = &j;
     16   int *&z = k;
     17   int aa[10];
     18   arr &raa = aa;
     19   void func(int arg) {
     20 #pragma omp target is_device_ptr // expected-error {{expected '(' after 'is_device_ptr'}}
     21     {}
     22 #pragma omp target is_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}}
     23     {}
     24 #pragma omp target is_device_ptr() // expected-error {{expected expression}}
     25     {}
     26 #pragma omp target is_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}}
     27     {}
     28 #pragma omp target is_device_ptr(arg // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
     29     {}
     30 #pragma omp target is_device_ptr(i) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
     31     {}
     32 #pragma omp target is_device_ptr(j) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
     33     {}
     34 #pragma omp target is_device_ptr(k) // OK
     35     {}
     36 #pragma omp target is_device_ptr(z) // OK
     37     {}
     38 #pragma omp target is_device_ptr(aa) // OK
     39     {}
     40 #pragma omp target is_device_ptr(raa) // OK
     41     {}
     42 #pragma omp target is_device_ptr(e) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
     43     {}
     44 #pragma omp target is_device_ptr(g) // OK
     45     {}
     46 #pragma omp target is_device_ptr(rg) // OK
     47     {}
     48 #pragma omp target is_device_ptr(k,i,j) // expected-error2 {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
     49     {}
     50 #pragma omp target is_device_ptr(d) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
     51     {}
     52 #pragma omp target is_device_ptr(da) // OK
     53     {}
     54   return;
     55  }
     56 };
     57 struct SB {
     58   unsigned A;
     59   unsigned B;
     60   float Arr[100];
     61   float *Ptr;
     62   float *foo() {
     63     return &Arr[0];
     64   }
     65 };
     66 
     67 struct SC {
     68   unsigned A : 2;
     69   unsigned B : 3;
     70   unsigned C;
     71   unsigned D;
     72   float Arr[100];
     73   SB S;
     74   SB ArrS[100];
     75   SB *PtrS;
     76   SB *&RPtrS;
     77   float *Ptr;
     78 
     79   SC(SB *&_RPtrS) : RPtrS(_RPtrS) {}
     80 };
     81 
     82 union SD {
     83   unsigned A;
     84   float B;
     85 };
     86 
     87 struct S1;
     88 extern S1 a;
     89 class S2 {
     90   mutable int a;
     91 public:
     92   S2():a(0) { }
     93   S2(S2 &s2):a(s2.a) { }
     94   static float S2s;
     95   static const float S2sc;
     96 };
     97 const float S2::S2sc = 0;
     98 const S2 b;
     99 const S2 ba[5];
    100 class S3 {
    101   int a;
    102 public:
    103   S3():a(0) { }
    104   S3(S3 &s3):a(s3.a) { }
    105 };
    106 const S3 c;
    107 const S3 ca[5];
    108 extern const int f;
    109 class S4 {
    110   int a;
    111   S4();
    112   S4(const S4 &s4);
    113 public:
    114   S4(int v):a(v) { }
    115 };
    116 class S5 {
    117   int a;
    118   S5():a(0) {}
    119   S5(const S5 &s5):a(s5.a) { }
    120 public:
    121   S5(int v):a(v) { }
    122 };
    123 
    124 S3 h;
    125 #pragma omp threadprivate(h)
    126 
    127 typedef struct {
    128   int a;
    129 } S6;
    130 
    131 template <typename T, int I>
    132 T tmain(T argc) {
    133   const T d = 5;
    134   const T da[5] = { 0 };
    135   S4 e(4);
    136   S5 g(5);
    137   S6 h[10];
    138   auto &rh = h;
    139   T i;
    140   T &j = i;
    141   T *k = &j;
    142   T *&z = k;
    143   T aa[10];
    144   auto &raa = aa;
    145 #pragma omp target is_device_ptr // expected-error {{expected '(' after 'is_device_ptr'}}
    146   {}
    147 #pragma omp target is_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}}
    148   {}
    149 #pragma omp target is_device_ptr() // expected-error {{expected expression}}
    150   {}
    151 #pragma omp target is_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}}
    152   {}
    153 #pragma omp target is_device_ptr(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    154   {}
    155 #pragma omp target is_device_ptr(i) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    156   {}
    157 #pragma omp target is_device_ptr(j) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    158   {}
    159 #pragma omp target is_device_ptr(k) // OK
    160   {}
    161 #pragma omp target is_device_ptr(z) // OK
    162   {}
    163 #pragma omp target is_device_ptr(aa) // OK
    164   {}
    165 #pragma omp target is_device_ptr(raa) // OK
    166   {}
    167 #pragma omp target is_device_ptr(e) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    168   {}
    169 #pragma omp target is_device_ptr(g) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    170   {}
    171 #pragma omp target is_device_ptr(h) // OK
    172   {}
    173 #pragma omp target is_device_ptr(rh) // OK
    174   {}
    175 #pragma omp target is_device_ptr(k,i,j) // expected-error2 {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    176   {}
    177 #pragma omp target is_device_ptr(d) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    178   {}
    179 #pragma omp target is_device_ptr(da) // OK
    180   {}
    181   return 0;
    182 }
    183 
    184 int main(int argc, char **argv) {
    185   const int d = 5;
    186   const int da[5] = { 0 };
    187   S4 e(4);
    188   S5 g(5);
    189   S6 h[10];
    190   auto &rh = h;
    191   int i;
    192   int &j = i;
    193   int *k = &j;
    194   int *&z = k;
    195   int aa[10];
    196   auto &raa = aa;
    197 #pragma omp target is_device_ptr // expected-error {{expected '(' after 'is_device_ptr'}}
    198   {}
    199 #pragma omp target is_device_ptr( // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected expression}}
    200   {}
    201 #pragma omp target is_device_ptr() // expected-error {{expected expression}}
    202   {}
    203 #pragma omp target is_device_ptr(alloc) // expected-error {{use of undeclared identifier 'alloc'}}
    204   {}
    205 #pragma omp target is_device_ptr(argc // expected-error {{expected ')'}} expected-note {{to match this '('}} expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    206   {}
    207 #pragma omp target is_device_ptr(i) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    208   {}
    209 #pragma omp target is_device_ptr(j) // expected-error {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    210   {}
    211 #pragma omp target is_device_ptr(k) // OK
    212   {}
    213 #pragma omp target is_device_ptr(z) // OK
    214   {}
    215 #pragma omp target is_device_ptr(aa) // OK
    216   {}
    217 #pragma omp target is_device_ptr(raa) // OK
    218   {}
    219 #pragma omp target is_device_ptr(e) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    220   {}
    221 #pragma omp target is_device_ptr(g) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    222   {}
    223 #pragma omp target is_device_ptr(h) // OK
    224   {}
    225 #pragma omp target is_device_ptr(rh) // OK
    226   {}
    227 #pragma omp target is_device_ptr(k,i,j) // expected-error2 {{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    228   {}
    229 #pragma omp target is_device_ptr(d) // expected-error{{expected pointer, array, reference to pointer, or reference to array in 'is_device_ptr clause'}}
    230   {}
    231 #pragma omp target is_device_ptr(da) // OK
    232   {}
    233   return tmain<int, 3>(argc); // expected-note {{in instantiation of function template specialization 'tmain<int, 3>' requested here}}
    234 }
    235