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