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