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