1 | // RUN: %clang_cc1 -std=c++11 -ast-dump -triple aarch64-linux-gnu %s | FileCheck %s --strict-whitespace
|
2 | // RUN: %clang_cc1 -std=c++11 -ast-dump -triple aarch64-linux-gnu -fnative-half-type %s | FileCheck %s --check-prefix=CHECK-NATIVE --strict-whitespace
|
3 |
|
4 | /* Various contexts where type _Float16 can appear. */
|
5 |
|
6 | /* Namespace */
|
7 | namespace {
|
8 | _Float16 f1n;
|
9 | _Float16 f2n = 33.f16;
|
10 | _Float16 arr1n[10];
|
11 | _Float16 arr2n[] = { 1.2, 3.0, 3.e4 };
|
12 | const volatile _Float16 func1n(const _Float16 &arg) {
|
13 | return arg + f2n + arr1n[4] - arr2n[1];
|
14 | }
|
15 | }
|
16 |
|
17 | //CHECK: |-NamespaceDecl
|
18 | //CHECK-NEXT: | |-VarDecl {{.*}} f1n '_Float16'
|
19 | //CHECK-NEXT: | |-VarDecl {{.*}} f2n '_Float16' cinit
|
20 | //CHECK-NEXT: | | `-FloatingLiteral {{.*}} '_Float16' 3.300000e+01
|
21 | //CHECK-NEXT: | |-VarDecl {{.*}} arr1n '_Float16 [10]'
|
22 | //CHECK-NEXT: | |-VarDecl {{.*}} arr2n '_Float16 [3]' cinit
|
23 | //CHECK-NEXT: | | `-InitListExpr {{.*}} '_Float16 [3]'
|
24 | //CHECK-NEXT: | | |-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
|
25 | //CHECK-NEXT: | | | `-FloatingLiteral {{.*}} 'double' 1.200000e+00
|
26 | //CHECK-NEXT: | | |-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
|
27 | //CHECK-NEXT: | | | `-FloatingLiteral {{.*}} 'double' 3.000000e+00
|
28 | //CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
|
29 | //CHECK-NEXT: | | `-FloatingLiteral {{.*}} 'double' 3.000000e+04
|
30 | //CHECK-NEXT: | `-FunctionDecl {{.*}} func1n 'const volatile _Float16 (const _Float16 &)'
|
31 |
|
32 | /* File */
|
33 | _Float16 f1f;
|
34 | _Float16 f2f = 32.4;
|
35 | _Float16 arr1f[10];
|
36 | _Float16 arr2f[] = { -1.2, -3.0, -3.e4 };
|
37 | _Float16 func1f(_Float16 arg);
|
38 |
|
39 | //CHECK: |-VarDecl {{.*}} f1f '_Float16'
|
40 | //CHECK-NEXT: |-VarDecl {{.*}} f2f '_Float16' cinit
|
41 | //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
|
42 | //CHECK-NEXT: | `-FloatingLiteral {{.*}} 'double' 3.240000e+01
|
43 | //CHECK-NEXT: |-VarDecl {{.*}} arr1f '_Float16 [10]'
|
44 | //CHECK-NEXT: |-VarDecl {{.*}} arr2f '_Float16 [3]' cinit
|
45 | //CHECK-NEXT: | `-InitListExpr {{.*}} '_Float16 [3]'
|
46 | //CHECK-NEXT: | |-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
|
47 | //CHECK-NEXT: | | `-UnaryOperator {{.*}} 'double' prefix '-'
|
48 | //CHECK-NEXT: | | `-FloatingLiteral {{.*}} 'double' 1.200000e+00
|
49 | //CHECK-NEXT: | |-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
|
50 | //CHECK-NEXT: | | `-UnaryOperator {{.*}} 'double' prefix '-'
|
51 | //CHECK-NEXT: | | `-FloatingLiteral {{.*}} 'double' 3.000000e+00
|
52 | //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
|
53 | //CHECK-NEXT: | `-UnaryOperator {{.*}} 'double' prefix '-'
|
54 | //CHECK-NEXT: | `-FloatingLiteral {{.*}} 'double' 3.000000e+04
|
55 | //CHECK-NEXT: |-FunctionDecl {{.*}} func1f '_Float16 (_Float16)'
|
56 | //CHECK-NEXT: | `-ParmVarDecl {{.*}} arg '_Float16'
|
57 |
|
58 |
|
59 | // Mixing __fp16 and Float16 types:
|
60 | // The _Float16 type is first converted to __fp16 type and then the operation
|
61 | // is completed as if both operands were of __fp16 type.
|
62 |
|
63 | __fp16 B = -0.1;
|
64 | auto C = -1.0f16 + B;
|
65 |
|
66 | // When we do *not* have native half types, we expect __fp16 to be promoted to
|
67 | // float, and consequently also _Float16 promotions to float:
|
68 |
|
69 | //CHECK: -VarDecl {{.*}} used B '__fp16' cinit
|
70 | //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '__fp16' <FloatingCast>
|
71 | //CHECK-NEXT: | `-UnaryOperator {{.*}} 'double' prefix '-'
|
72 | //CHECK-NEXT: | `-FloatingLiteral {{.*}} 'double' 1.000000e-01
|
73 | //CHECK-NEXT: |-VarDecl {{.*}} C 'float':'float' cinit
|
74 | //CHECK-NEXT: | `-BinaryOperator {{.*}} 'float' '+'
|
75 | //CHECK-NEXT: | |-ImplicitCastExpr {{.*}} 'float' <FloatingCast>
|
76 | //CHECK-NEXT: | | `-UnaryOperator {{.*}} '_Float16' prefix '-'
|
77 | //CHECK-NEXT: | | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+00
|
78 | //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} 'float' <FloatingCast>
|
79 | //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '__fp16' <LValueToRValue>
|
80 | //CHECK-NEXT: | `-DeclRefExpr {{.*}} '__fp16' lvalue Var 0x{{.*}} 'B' '__fp16'
|
81 |
|
82 | // When do have native half types, we expect to see promotions to fp16:
|
83 |
|
84 | //CHECK-NATIVE: |-VarDecl {{.*}} used B '__fp16' cinit
|
85 | //CHECK-NATIVE: | `-ImplicitCastExpr {{.*}} '__fp16' <FloatingCast>
|
86 | //CHECK-NATIVE: | `-UnaryOperator {{.*}} 'double' prefix '-'
|
87 | //CHECK-NATIVE: | `-FloatingLiteral {{.*}} 'double' 1.000000e-01
|
88 | //CHECK-NATIVE: |-VarDecl {{.*}} C '__fp16':'__fp16' cinit
|
89 | //CHECK-NATIVE: | `-BinaryOperator {{.*}} '__fp16' '+'
|
90 | //CHECK-NATIVE: | |-ImplicitCastExpr {{.*}} '__fp16' <FloatingCast>
|
91 | //CHECK-NATIVE: | | `-UnaryOperator {{.*}} '_Float16' prefix '-'
|
92 | //CHECK-NATIVE: | | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+00
|
93 | //CHECK-NATIVE: | `-ImplicitCastExpr {{.*}} '__fp16' <LValueToRValue>
|
94 | //CHECK-NATIVE: | `-DeclRefExpr {{.*}} '__fp16' lvalue Var 0x{{.*}} 'B' '__fp16'
|
95 |
|
96 |
|
97 | /* Class */
|
98 |
|
99 | class C1 {
|
100 | _Float16 f1c;
|
101 | static const _Float16 f2c;
|
102 | volatile _Float16 f3c;
|
103 | public:
|
104 | C1(_Float16 arg) : f1c(arg), f3c(arg) { }
|
105 | _Float16 func1c(_Float16 arg ) {
|
106 | return f1c + arg;
|
107 | }
|
108 | static _Float16 func2c(_Float16 arg) {
|
109 | return arg * C1::f2c;
|
110 | }
|
111 | };
|
112 |
|
113 | //CHECK: |-CXXRecordDecl {{.*}} referenced class C1 definition
|
114 | //CHECK: | |-CXXRecordDecl {{.*}} implicit referenced class C1
|
115 | //CHECK-NEXT: | |-FieldDecl {{.*}} referenced f1c '_Float16'
|
116 | //CHECK-NEXT: | |-VarDecl {{.*}} used f2c 'const _Float16' static
|
117 | //CHECK-NEXT: | |-FieldDecl {{.*}} f3c 'volatile _Float16'
|
118 | //CHECK-NEXT: | |-AccessSpecDecl
|
119 | //CHECK-NEXT: | |-CXXConstructorDecl {{.*}} used C1 'void (_Float16)
|
120 | //CHECK-NEXT: | | |-ParmVarDecl {{.*}} used arg '_Float16'
|
121 | //CHECK-NEXT: | | |-CXXCtorInitializer Field {{.*}} 'f1c' '_Float16'
|
122 | //CHECK-NEXT: | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
123 | //CHECK-NEXT: | | | `-DeclRefExpr {{.*}} '_Float16' lvalue ParmVar 0x{{.*}} 'arg' '_Float16'
|
124 | //CHECK-NEXT: | | |-CXXCtorInitializer Field {{.*}} 'f3c' 'volatile _Float16'
|
125 | //CHECK-NEXT: | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
126 | //CHECK-NEXT: | | | `-DeclRefExpr {{.*}} '_Float16' lvalue ParmVar 0x{{.*}} 'arg' '_Float16'
|
127 | //CHECK-NEXT: | | `-CompoundStmt
|
128 | //CHECK-NEXT: | |-CXXMethodDecl {{.*}} used func1c '_Float16 (_Float16)
|
129 | //CHECK-NEXT: | | |-ParmVarDecl {{.*}} used arg '_Float16'
|
130 | //CHECK-NEXT: | | `-CompoundStmt
|
131 | //CHECK-NEXT: | | `-ReturnStmt
|
132 | //CHECK-NEXT: | | `-BinaryOperator {{.*}} '_Float16' '+'
|
133 | //CHECK-NEXT: | | |-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
134 | //CHECK-NEXT: | | | `-MemberExpr {{.*}} '_Float16' lvalue ->f1c 0x{{.*}}
|
135 | //CHECK-NEXT: | | | `-CXXThisExpr {{.*}} 'C1 *' implicit this
|
136 | //CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
137 | //CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16' lvalue ParmVar 0x{{.*}} 'arg' '_Float16'
|
138 | //CHECK-NEXT: | |-CXXMethodDecl {{.*}} used func2c '_Float16 (_Float16)' static
|
139 | //CHECK-NEXT: | | |-ParmVarDecl {{.*}} used arg '_Float16'
|
140 | //CHECK-NEXT: | | `-CompoundStmt
|
141 | //CHECK-NEXT: | | `-ReturnStmt
|
142 | //CHECK-NEXT: | | `-BinaryOperator {{.*}} '_Float16' '*'
|
143 | //CHECK-NEXT: | | |-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
144 | //CHECK-NEXT: | | | `-DeclRefExpr {{.*}} '_Float16' lvalue ParmVar 0x{{.*}} 'arg' '_Float16'
|
145 | //CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
146 | //CHECK-NEXT: | | `-DeclRefExpr {{.*}} 'const _Float16' lvalue Var 0x{{.*}} 'f2c' 'const _Float16'
|
147 |
|
148 |
|
149 | /* Template */
|
150 |
|
151 | template <class C> C func1t(C arg) {
|
152 | return arg * 2.f16;
|
153 | }
|
154 |
|
155 | //CHECK: |-FunctionTemplateDecl {{.*}} func1t
|
156 | //CHECK-NEXT: | |-TemplateTypeParmDecl {{.*}} C
|
157 | //CHECK-NEXT: | |-FunctionDecl {{.*}} func1t 'C (C)'
|
158 | //CHECK-NEXT: | | |-ParmVarDecl {{.*}} referenced arg 'C'
|
159 | //CHECK-NEXT: | | `-CompoundStmt
|
160 | //CHECK-NEXT: | | `-ReturnStmt
|
161 | //CHECK-NEXT: | | `-BinaryOperator {{.*}} '<dependent type>' '*'
|
162 | //CHECK-NEXT: | | |-DeclRefExpr {{.*}} 'C' lvalue ParmVar {{.*}} 'arg' 'C'
|
163 | //CHECK-NEXT: | | `-FloatingLiteral {{.*}} '_Float16' 2.000000e+00
|
164 | //CHECK-NEXT: | `-FunctionDecl {{.*}} used func1t '_Float16 (_Float16)'
|
165 | //CHECK-NEXT: | |-TemplateArgument type '_Float16'
|
166 | //CHECK-NEXT: | |-ParmVarDecl {{.*}} used arg '_Float16':'_Float16'
|
167 | //CHECK-NEXT: | `-CompoundStmt
|
168 | //CHECK-NEXT: | `-ReturnStmt
|
169 | //CHECK-NEXT: | `-BinaryOperator {{.*}} '_Float16' '*'
|
170 | //CHECK-NEXT: | |-ImplicitCastExpr {{.*}} '_Float16':'_Float16' <LValueToRValue>
|
171 | //CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16':'_Float16' lvalue ParmVar {{.*}} 'arg' '_Float16':'_Float16'
|
172 | //CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 2.000000e+00
|
173 |
|
174 |
|
175 | template <class C> struct S1 {
|
176 | C mem1;
|
177 | };
|
178 |
|
179 | //CHECK: |-ClassTemplateDecl {{.*}} S1
|
180 | //CHECK-NEXT: | |-TemplateTypeParmDecl {{.*}} referenced class depth 0 index 0 C
|
181 | //CHECK-NEXT: | |-CXXRecordDecl {{.*}} struct S1 definition
|
182 | //CHECK: | | |-CXXRecordDecl {{.*}} implicit struct S1
|
183 | //CHECK-NEXT: | | `-FieldDecl {{.*}} mem1 'C'
|
184 | //CHECK-NEXT: | `-ClassTemplateSpecialization {{.*}} 'S1'
|
185 |
|
186 | template <> struct S1<_Float16> {
|
187 | _Float16 mem2;
|
188 | };
|
189 |
|
190 |
|
191 | /* Local */
|
192 |
|
193 | extern int printf (const char *__restrict __format, ...);
|
194 |
|
195 | int main(void) {
|
196 | _Float16 f1l = 1e3f16;
|
197 | //CHECK: | `-VarDecl {{.*}} used f1l '_Float16' cinit
|
198 | //CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+03
|
199 |
|
200 | _Float16 f2l = -0.f16;
|
201 | //CHECK: | `-VarDecl {{.*}} used f2l '_Float16' cinit
|
202 | //CHECK-NEXT: | `-UnaryOperator {{.*}} '_Float16' prefix '-'
|
203 | //CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 0.000000e+00
|
204 |
|
205 | _Float16 f3l = 1.000976562;
|
206 | //CHECK: | `-VarDecl {{.*}} used f3l '_Float16' cinit
|
207 | //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
|
208 | //CHECK-NEXT: | `-FloatingLiteral {{.*}} 'double' 1.000977e+00
|
209 |
|
210 | C1 c1(f1l);
|
211 | //CHECK: | `-VarDecl{{.*}} used c1 'C1' callinit
|
212 | //CHECK-NEXT: | `-CXXConstructExpr {{.*}} 'C1' 'void (_Float16)
|
213 | //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
214 | //CHECK-NEXT: | `-DeclRefExpr {{.*}} '_Float16' lvalue Var 0x{{.*}} 'f1l' '_Float16'
|
215 |
|
216 | S1<_Float16> s1 = { 132.f16 };
|
217 | //CHECK: | `-VarDecl {{.*}} used s1 'S1<_Float16>':'S1<_Float16>' cinit
|
218 | //CHECK-NEXT: | `-InitListExpr {{.*}} 'S1<_Float16>':'S1<_Float16>'
|
219 | //CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 1.320000e+02
|
220 |
|
221 | _Float16 f4l = func1n(f1l) + func1f(f2l) + c1.func1c(f3l) + c1.func2c(f1l) +
|
222 | func1t(f1l) + s1.mem2 - f1n + f2n;
|
223 | //CHECK: | `-VarDecl {{.*}} used f4l '_Float16' cinit
|
224 | //CHECK-NEXT: | `-BinaryOperator {{.*}} '_Float16' '+'
|
225 | //CHECK-NEXT: | |-BinaryOperator {{.*}} '_Float16' '-'
|
226 | //CHECK-NEXT: | | |-BinaryOperator {{.*}} '_Float16' '+'
|
227 | //CHECK-NEXT: | | | |-BinaryOperator {{.*}} '_Float16' '+'
|
228 | //CHECK-NEXT: | | | | |-BinaryOperator {{.*}} '_Float16' '+'
|
229 | //CHECK-NEXT: | | | | | |-BinaryOperator {{.*}} '_Float16' '+'
|
230 | //CHECK-NEXT: | | | | | | |-BinaryOperator {{.*}} '_Float16' '+'
|
231 | //CHECK-NEXT: | | | | | | | |-CallExpr {{.*}} '_Float16'
|
232 | //CHECK-NEXT: | | | | | | | | |-ImplicitCastExpr {{.*}} 'const volatile _Float16 (*)(const _Float16 &)' <FunctionToPointerDecay>
|
233 | //CHECK-NEXT: | | | | | | | | | `-DeclRefExpr {{.*}} 'const volatile _Float16 (const _Float16 &)' lvalue Function {{.*}} 'func1n' 'const volatile _Float16 (const _Float16 &)'
|
234 | //CHECK-NEXT: | | | | | | | | `-ImplicitCastExpr {{.*}} 'const _Float16' lvalue <NoOp>
|
235 | //CHECK-NEXT: | | | | | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f1l' '_Float16'
|
236 | //CHECK-NEXT: | | | | | | | `-CallExpr {{.*}} '_Float16'
|
237 | //CHECK-NEXT: | | | | | | | |-ImplicitCastExpr {{.*}} '_Float16 (*)(_Float16)' <FunctionToPointerDecay>
|
238 | //CHECK-NEXT: | | | | | | | | `-DeclRefExpr {{.*}} '_Float16 (_Float16)' lvalue Function {{.*}} 'func1f' '_Float16 (_Float16)'
|
239 | //CHECK-NEXT: | | | | | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
240 | //CHECK-NEXT: | | | | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2l' '_Float16'
|
241 | //CHECK-NEXT: | | | | | | `-CXXMemberCallExpr {{.*}} '_Float16'
|
242 | //CHECK-NEXT: | | | | | | |-MemberExpr {{.*}} '<bound member function type>' .func1c {{.*}}
|
243 | //CHECK-NEXT: | | | | | | | `-DeclRefExpr {{.*}} 'C1' lvalue Var {{.*}} 'c1' 'C1'
|
244 | //CHECK-NEXT: | | | | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
245 | //CHECK-NEXT: | | | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f3l' '_Float16'
|
246 | //CHECK-NEXT: | | | | | `-CallExpr {{.*}} '_Float16'
|
247 | //CHECK-NEXT: | | | | | |-ImplicitCastExpr {{.*}} '_Float16 (*)(_Float16)' <FunctionToPointerDecay>
|
248 | //CHECK-NEXT: | | | | | | `-MemberExpr {{.*}} '_Float16 (_Float16)' lvalue .func2c {{.*}}
|
249 | //CHECK-NEXT: | | | | | | `-DeclRefExpr {{.*}} 'C1' lvalue Var {{.*}} 'c1' 'C1'
|
250 | //CHECK-NEXT: | | | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
251 | //CHECK-NEXT: | | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f1l' '_Float16'
|
252 | //CHECK-NEXT: | | | | `-CallExpr {{.*}} '_Float16':'_Float16'
|
253 | //CHECK-NEXT: | | | | |-ImplicitCastExpr {{.*}} '_Float16 (*)(_Float16)' <FunctionToPointerDecay>
|
254 | //CHECK-NEXT: | | | | | `-DeclRefExpr {{.*}} '_Float16 (_Float16)' lvalue Function {{.*}} 'func1t' '_Float16 (_Float16)' (FunctionTemplate {{.*}} 'func1t')
|
255 | //CHECK-NEXT: | | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
256 | //CHECK-NEXT: | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f1l' '_Float16'
|
257 | //CHECK-NEXT: | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
258 | //CHECK-NEXT: | | | `-MemberExpr {{.*}} '_Float16' lvalue .mem2 {{.*}}
|
259 | //CHECK-NEXT: | | | `-DeclRefExpr {{.*}} 'S1<_Float16>':'S1<_Float16>' lvalue Var {{.*}} 's1' 'S1<_Float16>':'S1<_Float16>'
|
260 | //CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
261 | //CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f1n' '_Float16'
|
262 | //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
263 | //CHECK-NEXT: | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2n' '_Float16'
|
264 |
|
265 | auto f5l = -1.f16, *f6l = &f2l, f7l = func1t(f3l);
|
266 | //CHECK: | |-VarDecl {{.*}} f5l '_Float16':'_Float16' cinit
|
267 | //CHECK-NEXT: | | `-UnaryOperator {{.*}} '_Float16' prefix '-'
|
268 | //CHECK-NEXT: | | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+00
|
269 | //CHECK-NEXT: | |-VarDecl {{.*}} f6l '_Float16 *' cinit
|
270 | //CHECK-NEXT: | | `-UnaryOperator {{.*}} '_Float16 *' prefix '&'
|
271 | //CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2l' '_Float16'
|
272 | //CHECK-NEXT: | `-VarDecl {{.*}} f7l '_Float16':'_Float16' cinit
|
273 | //CHECK-NEXT: | `-CallExpr {{.*}} '_Float16':'_Float16'
|
274 | //CHECK-NEXT: | |-ImplicitCastExpr {{.*}} '_Float16 (*)(_Float16)' <FunctionToPointerDecay>
|
275 | //CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16 (_Float16)' lvalue Function {{.*}} 'func1t' '_Float16 (_Float16)' (FunctionTemplate {{.*}} 'func1t')
|
276 | //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
277 | //CHECK-NEXT: | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f3l' '_Float16'
|
278 |
|
279 | _Float16 f8l = f4l++;
|
280 | //CHECK: | `-VarDecl {{.*}} f8l '_Float16' cinit
|
281 | //CHECK-NEXT: | `-UnaryOperator {{.*}} '_Float16' postfix '++'
|
282 | //CHECK-NEXT: | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f4l' '_Float16'
|
283 |
|
284 | _Float16 arr1l[] = { -1.f16, -0.f16, -11.f16 };
|
285 | //CHECK: `-VarDecl {{.*}} arr1l '_Float16 [3]' cinit
|
286 | //CHECK-NEXT: `-InitListExpr {{.*}} '_Float16 [3]'
|
287 | //CHECK-NEXT: |-UnaryOperator {{.*}} '_Float16' prefix '-'
|
288 | //CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+00
|
289 | //CHECK-NEXT: |-UnaryOperator {{.*}} '_Float16' prefix '-'
|
290 | //CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 0.000000e+00
|
291 | //CHECK-NEXT: `-UnaryOperator {{.*}} '_Float16' prefix '-'
|
292 | //CHECK-NEXT: `-FloatingLiteral {{.*}} '_Float16' 1.100000e+01
|
293 |
|
294 | float cvtf = f2n;
|
295 | //CHECK: `-VarDecl {{.*}} cvtf 'float' cinit
|
296 | //CHECK-NEXT: `-ImplicitCastExpr {{.*}} 'float' <FloatingCast>
|
297 | //CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
298 | //CHECK-NEXT: `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2n' '_Float16'
|
299 |
|
300 | double cvtd = f2n;
|
301 | //CHECK: `-VarDecl {{.*}} cvtd 'double' cinit
|
302 | //CHECK-NEXT: `-ImplicitCastExpr {{.*}} 'double' <FloatingCast>
|
303 | //CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
304 | //CHECK-NEXT: `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2n' '_Float16'
|
305 |
|
306 | long double cvtld = f2n;
|
307 | //CHECK: `-VarDecl {{.*}} cvtld 'long double' cinit
|
308 | //CHECK-NEXT: `-ImplicitCastExpr {{.*}} 'long double' <FloatingCast>
|
309 | //CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
|
310 | //CHECK-NEXT: `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2n' '_Float16'
|
311 |
|
312 | _Float16 f2h = 42.0f;
|
313 | //CHECK: `-VarDecl {{.*}} f2h '_Float16' cinit
|
314 | //CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
|
315 | //CHECK-NEXT: `-FloatingLiteral {{.*}} 'float' 4.200000e+01
|
316 |
|
317 | _Float16 d2h = 42.0;
|
318 | //CHECK: `-VarDecl {{.*}} d2h '_Float16' cinit
|
319 | //CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
|
320 | //CHECK-NEXT: `-FloatingLiteral {{.*}} 'double' 4.200000e+01
|
321 |
|
322 | _Float16 ld2h = 42.0l;
|
323 | //CHECK: `-VarDecl {{.*}} ld2h '_Float16' cinit
|
324 | //CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
|
325 | //CHECK-NEXT: `-FloatingLiteral {{.*}} 'long double' 4.200000e+01
|
326 | }
|
327 | |