1cddc9993SBruno Ricci // Tests without serialization:
2cddc9993SBruno Ricci // RUN: %clang_cc1 -std=c++11 -ast-dump -triple aarch64-linux-gnu %s \
3cddc9993SBruno Ricci // RUN: | FileCheck %s --strict-whitespace
4cddc9993SBruno Ricci //
5cddc9993SBruno Ricci // RUN: %clang_cc1 -std=c++11 -ast-dump -triple aarch64-linux-gnu -fnative-half-type %s \
6cddc9993SBruno Ricci // RUN: | FileCheck %s --check-prefix=CHECK-NATIVE --strict-whitespace
7cddc9993SBruno Ricci //
8cddc9993SBruno Ricci // Tests with serialization:
9cddc9993SBruno Ricci // RUN: %clang_cc1 -std=c++11 -triple aarch64-linux-gnu -emit-pch -o %t %s
10cddc9993SBruno Ricci // RUN: %clang_cc1 -x c++ -std=c++11 -triple aarch64-linux-gnu -include-pch %t -ast-dump-all /dev/null \
11cddc9993SBruno Ricci // RUN: | sed -e "s/ <undeserialized declarations>//" -e "s/ imported//" \
12cddc9993SBruno Ricci // RUN: | FileCheck %s --strict-whitespace
13cddc9993SBruno Ricci //
14cddc9993SBruno Ricci // RUN: %clang_cc1 -std=c++11 -triple aarch64-linux-gnu -fnative-half-type -emit-pch -o %t %s
15cddc9993SBruno Ricci // RUN: %clang_cc1 -x c++ -std=c++11 -triple aarch64-linux-gnu -fnative-half-type -include-pch %t -ast-dump-all /dev/null \
16cddc9993SBruno Ricci // RUN: | sed -e "s/ <undeserialized declarations>//" -e "s/ imported//" \
17cddc9993SBruno Ricci // RUN: | FileCheck %s --check-prefix=CHECK-NATIVE --strict-whitespace
184b5b0c00SAaron Ballman
194b5b0c00SAaron Ballman /* Various contexts where type _Float16 can appear. */
204b5b0c00SAaron Ballman
214b5b0c00SAaron Ballman /* Namespace */
224b5b0c00SAaron Ballman namespace {
234b5b0c00SAaron Ballman _Float16 f1n;
244b5b0c00SAaron Ballman _Float16 f2n = 33.f16;
254b5b0c00SAaron Ballman _Float16 arr1n[10];
264b5b0c00SAaron Ballman _Float16 arr2n[] = { 1.2, 3.0, 3.e4 };
func1n(const _Float16 & arg)274b5b0c00SAaron Ballman const volatile _Float16 func1n(const _Float16 &arg) {
284b5b0c00SAaron Ballman return arg + f2n + arr1n[4] - arr2n[1];
294b5b0c00SAaron Ballman }
304b5b0c00SAaron Ballman }
314b5b0c00SAaron Ballman
324b5b0c00SAaron Ballman //CHECK: |-NamespaceDecl
334b5b0c00SAaron Ballman //CHECK-NEXT: | |-VarDecl {{.*}} f1n '_Float16'
344b5b0c00SAaron Ballman //CHECK-NEXT: | |-VarDecl {{.*}} f2n '_Float16' cinit
354b5b0c00SAaron Ballman //CHECK-NEXT: | | `-FloatingLiteral {{.*}} '_Float16' 3.300000e+01
364b5b0c00SAaron Ballman //CHECK-NEXT: | |-VarDecl {{.*}} arr1n '_Float16[10]'
374b5b0c00SAaron Ballman //CHECK-NEXT: | |-VarDecl {{.*}} arr2n '_Float16[3]' cinit
384b5b0c00SAaron Ballman //CHECK-NEXT: | | `-InitListExpr {{.*}} '_Float16[3]'
394b5b0c00SAaron Ballman //CHECK-NEXT: | | |-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
404b5b0c00SAaron Ballman //CHECK-NEXT: | | | `-FloatingLiteral {{.*}} 'double' 1.200000e+00
414b5b0c00SAaron Ballman //CHECK-NEXT: | | |-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
424b5b0c00SAaron Ballman //CHECK-NEXT: | | | `-FloatingLiteral {{.*}} 'double' 3.000000e+00
434b5b0c00SAaron Ballman //CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
444b5b0c00SAaron Ballman //CHECK-NEXT: | | `-FloatingLiteral {{.*}} 'double' 3.000000e+04
454b5b0c00SAaron Ballman //CHECK-NEXT: | `-FunctionDecl {{.*}} func1n 'const volatile _Float16 (const _Float16 &)'
464b5b0c00SAaron Ballman
474b5b0c00SAaron Ballman /* File */
484b5b0c00SAaron Ballman _Float16 f1f;
494b5b0c00SAaron Ballman _Float16 f2f = 32.4;
504b5b0c00SAaron Ballman _Float16 arr1f[10];
514b5b0c00SAaron Ballman _Float16 arr2f[] = { -1.2, -3.0, -3.e4 };
524b5b0c00SAaron Ballman _Float16 func1f(_Float16 arg);
534b5b0c00SAaron Ballman
544b5b0c00SAaron Ballman //CHECK: |-VarDecl {{.*}} f1f '_Float16'
554b5b0c00SAaron Ballman //CHECK-NEXT: |-VarDecl {{.*}} f2f '_Float16' cinit
564b5b0c00SAaron Ballman //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
574b5b0c00SAaron Ballman //CHECK-NEXT: | `-FloatingLiteral {{.*}} 'double' 3.240000e+01
584b5b0c00SAaron Ballman //CHECK-NEXT: |-VarDecl {{.*}} arr1f '_Float16[10]'
594b5b0c00SAaron Ballman //CHECK-NEXT: |-VarDecl {{.*}} arr2f '_Float16[3]' cinit
604b5b0c00SAaron Ballman //CHECK-NEXT: | `-InitListExpr {{.*}} '_Float16[3]'
614b5b0c00SAaron Ballman //CHECK-NEXT: | |-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
624b5b0c00SAaron Ballman //CHECK-NEXT: | | `-UnaryOperator {{.*}} 'double' prefix '-'
634b5b0c00SAaron Ballman //CHECK-NEXT: | | `-FloatingLiteral {{.*}} 'double' 1.200000e+00
644b5b0c00SAaron Ballman //CHECK-NEXT: | |-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
654b5b0c00SAaron Ballman //CHECK-NEXT: | | `-UnaryOperator {{.*}} 'double' prefix '-'
664b5b0c00SAaron Ballman //CHECK-NEXT: | | `-FloatingLiteral {{.*}} 'double' 3.000000e+00
674b5b0c00SAaron Ballman //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
684b5b0c00SAaron Ballman //CHECK-NEXT: | `-UnaryOperator {{.*}} 'double' prefix '-'
694b5b0c00SAaron Ballman //CHECK-NEXT: | `-FloatingLiteral {{.*}} 'double' 3.000000e+04
704b5b0c00SAaron Ballman //CHECK-NEXT: |-FunctionDecl {{.*}} func1f '_Float16 (_Float16)'
714b5b0c00SAaron Ballman //CHECK-NEXT: | `-ParmVarDecl {{.*}} arg '_Float16'
724b5b0c00SAaron Ballman
734b5b0c00SAaron Ballman
744b5b0c00SAaron Ballman // Mixing __fp16 and Float16 types:
754b5b0c00SAaron Ballman // The _Float16 type is first converted to __fp16 type and then the operation
764b5b0c00SAaron Ballman // is completed as if both operands were of __fp16 type.
774b5b0c00SAaron Ballman
784b5b0c00SAaron Ballman __fp16 B = -0.1;
794b5b0c00SAaron Ballman auto C = -1.0f16 + B;
804b5b0c00SAaron Ballman
814b5b0c00SAaron Ballman // When we do *not* have native half types, we expect __fp16 to be promoted to
824b5b0c00SAaron Ballman // float, and consequently also _Float16 promotions to float:
834b5b0c00SAaron Ballman
844b5b0c00SAaron Ballman //CHECK: -VarDecl {{.*}} used B '__fp16' cinit
854b5b0c00SAaron Ballman //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '__fp16' <FloatingCast>
864b5b0c00SAaron Ballman //CHECK-NEXT: | `-UnaryOperator {{.*}} 'double' prefix '-'
874b5b0c00SAaron Ballman //CHECK-NEXT: | `-FloatingLiteral {{.*}} 'double' 1.000000e-01
884b5b0c00SAaron Ballman //CHECK-NEXT: |-VarDecl {{.*}} C 'float':'float' cinit
894b5b0c00SAaron Ballman //CHECK-NEXT: | `-BinaryOperator {{.*}} 'float' '+'
904b5b0c00SAaron Ballman //CHECK-NEXT: | |-ImplicitCastExpr {{.*}} 'float' <FloatingCast>
914b5b0c00SAaron Ballman //CHECK-NEXT: | | `-UnaryOperator {{.*}} '_Float16' prefix '-'
924b5b0c00SAaron Ballman //CHECK-NEXT: | | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+00
934b5b0c00SAaron Ballman //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} 'float' <FloatingCast>
944b5b0c00SAaron Ballman //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '__fp16' <LValueToRValue>
954b5b0c00SAaron Ballman //CHECK-NEXT: | `-DeclRefExpr {{.*}} '__fp16' lvalue Var 0x{{.*}} 'B' '__fp16'
964b5b0c00SAaron Ballman
974b5b0c00SAaron Ballman // When do have native half types, we expect to see promotions to fp16:
984b5b0c00SAaron Ballman
994b5b0c00SAaron Ballman //CHECK-NATIVE: |-VarDecl {{.*}} used B '__fp16' cinit
1004b5b0c00SAaron Ballman //CHECK-NATIVE: | `-ImplicitCastExpr {{.*}} '__fp16' <FloatingCast>
1014b5b0c00SAaron Ballman //CHECK-NATIVE: | `-UnaryOperator {{.*}} 'double' prefix '-'
1024b5b0c00SAaron Ballman //CHECK-NATIVE: | `-FloatingLiteral {{.*}} 'double' 1.000000e-01
1034b5b0c00SAaron Ballman //CHECK-NATIVE: |-VarDecl {{.*}} C '__fp16':'__fp16' cinit
1044b5b0c00SAaron Ballman //CHECK-NATIVE: | `-BinaryOperator {{.*}} '__fp16' '+'
1054b5b0c00SAaron Ballman //CHECK-NATIVE: | |-ImplicitCastExpr {{.*}} '__fp16' <FloatingCast>
1064b5b0c00SAaron Ballman //CHECK-NATIVE: | | `-UnaryOperator {{.*}} '_Float16' prefix '-'
1074b5b0c00SAaron Ballman //CHECK-NATIVE: | | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+00
1084b5b0c00SAaron Ballman //CHECK-NATIVE: | `-ImplicitCastExpr {{.*}} '__fp16' <LValueToRValue>
1094b5b0c00SAaron Ballman //CHECK-NATIVE: | `-DeclRefExpr {{.*}} '__fp16' lvalue Var 0x{{.*}} 'B' '__fp16'
1104b5b0c00SAaron Ballman
1114b5b0c00SAaron Ballman
1124b5b0c00SAaron Ballman /* Class */
1134b5b0c00SAaron Ballman
1144b5b0c00SAaron Ballman class C1 {
1154b5b0c00SAaron Ballman _Float16 f1c;
1164b5b0c00SAaron Ballman static const _Float16 f2c;
1174b5b0c00SAaron Ballman volatile _Float16 f3c;
1184b5b0c00SAaron Ballman public:
C1(_Float16 arg)1194b5b0c00SAaron Ballman C1(_Float16 arg) : f1c(arg), f3c(arg) { }
func1c(_Float16 arg)1204b5b0c00SAaron Ballman _Float16 func1c(_Float16 arg ) {
1214b5b0c00SAaron Ballman return f1c + arg;
1224b5b0c00SAaron Ballman }
func2c(_Float16 arg)1234b5b0c00SAaron Ballman static _Float16 func2c(_Float16 arg) {
1244b5b0c00SAaron Ballman return arg * C1::f2c;
1254b5b0c00SAaron Ballman }
1264b5b0c00SAaron Ballman };
1274b5b0c00SAaron Ballman
1284b5b0c00SAaron Ballman //CHECK: |-CXXRecordDecl {{.*}} referenced class C1 definition
1294b5b0c00SAaron Ballman //CHECK: | |-CXXRecordDecl {{.*}} implicit referenced class C1
1304b5b0c00SAaron Ballman //CHECK-NEXT: | |-FieldDecl {{.*}} referenced f1c '_Float16'
1314b5b0c00SAaron Ballman //CHECK-NEXT: | |-VarDecl {{.*}} used f2c 'const _Float16' static
1324b5b0c00SAaron Ballman //CHECK-NEXT: | |-FieldDecl {{.*}} f3c 'volatile _Float16'
1334b5b0c00SAaron Ballman //CHECK-NEXT: | |-AccessSpecDecl
1344b5b0c00SAaron Ballman //CHECK-NEXT: | |-CXXConstructorDecl {{.*}} used C1 'void (_Float16)
1354b5b0c00SAaron Ballman //CHECK-NEXT: | | |-ParmVarDecl {{.*}} used arg '_Float16'
1364b5b0c00SAaron Ballman //CHECK-NEXT: | | |-CXXCtorInitializer Field {{.*}} 'f1c' '_Float16'
1374b5b0c00SAaron Ballman //CHECK-NEXT: | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
1384b5b0c00SAaron Ballman //CHECK-NEXT: | | | `-DeclRefExpr {{.*}} '_Float16' lvalue ParmVar 0x{{.*}} 'arg' '_Float16'
1394b5b0c00SAaron Ballman //CHECK-NEXT: | | |-CXXCtorInitializer Field {{.*}} 'f3c' 'volatile _Float16'
1404b5b0c00SAaron Ballman //CHECK-NEXT: | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
1414b5b0c00SAaron Ballman //CHECK-NEXT: | | | `-DeclRefExpr {{.*}} '_Float16' lvalue ParmVar 0x{{.*}} 'arg' '_Float16'
1424b5b0c00SAaron Ballman //CHECK-NEXT: | | `-CompoundStmt
1434b5b0c00SAaron Ballman //CHECK-NEXT: | |-CXXMethodDecl {{.*}} used func1c '_Float16 (_Float16)
1444b5b0c00SAaron Ballman //CHECK-NEXT: | | |-ParmVarDecl {{.*}} used arg '_Float16'
1454b5b0c00SAaron Ballman //CHECK-NEXT: | | `-CompoundStmt
1464b5b0c00SAaron Ballman //CHECK-NEXT: | | `-ReturnStmt
1474b5b0c00SAaron Ballman //CHECK-NEXT: | | `-BinaryOperator {{.*}} '_Float16' '+'
1484b5b0c00SAaron Ballman //CHECK-NEXT: | | |-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
1494b5b0c00SAaron Ballman //CHECK-NEXT: | | | `-MemberExpr {{.*}} '_Float16' lvalue ->f1c 0x{{.*}}
15064bebe98SBruno Ricci //CHECK-NEXT: | | | `-CXXThisExpr {{.*}} 'C1 *' implicit this
1514b5b0c00SAaron Ballman //CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
1524b5b0c00SAaron Ballman //CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16' lvalue ParmVar 0x{{.*}} 'arg' '_Float16'
1534b5b0c00SAaron Ballman //CHECK-NEXT: | |-CXXMethodDecl {{.*}} used func2c '_Float16 (_Float16)' static
1544b5b0c00SAaron Ballman //CHECK-NEXT: | | |-ParmVarDecl {{.*}} used arg '_Float16'
1554b5b0c00SAaron Ballman //CHECK-NEXT: | | `-CompoundStmt
1564b5b0c00SAaron Ballman //CHECK-NEXT: | | `-ReturnStmt
1574b5b0c00SAaron Ballman //CHECK-NEXT: | | `-BinaryOperator {{.*}} '_Float16' '*'
1584b5b0c00SAaron Ballman //CHECK-NEXT: | | |-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
1594b5b0c00SAaron Ballman //CHECK-NEXT: | | | `-DeclRefExpr {{.*}} '_Float16' lvalue ParmVar 0x{{.*}} 'arg' '_Float16'
1604b5b0c00SAaron Ballman //CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
1614b5b0c00SAaron Ballman //CHECK-NEXT: | | `-DeclRefExpr {{.*}} 'const _Float16' lvalue Var 0x{{.*}} 'f2c' 'const _Float16'
1624b5b0c00SAaron Ballman
1634b5b0c00SAaron Ballman
1644b5b0c00SAaron Ballman /* Template */
1654b5b0c00SAaron Ballman
func1t(C arg)1664b5b0c00SAaron Ballman template <class C> C func1t(C arg) {
1674b5b0c00SAaron Ballman return arg * 2.f16;
1684b5b0c00SAaron Ballman }
1694b5b0c00SAaron Ballman
1704b5b0c00SAaron Ballman //CHECK: |-FunctionTemplateDecl {{.*}} func1t
1714b5b0c00SAaron Ballman //CHECK-NEXT: | |-TemplateTypeParmDecl {{.*}} C
1724b5b0c00SAaron Ballman //CHECK-NEXT: | |-FunctionDecl {{.*}} func1t 'C (C)'
1734b5b0c00SAaron Ballman //CHECK-NEXT: | | |-ParmVarDecl {{.*}} referenced arg 'C'
1744b5b0c00SAaron Ballman //CHECK-NEXT: | | `-CompoundStmt
1754b5b0c00SAaron Ballman //CHECK-NEXT: | | `-ReturnStmt
1764b5b0c00SAaron Ballman //CHECK-NEXT: | | `-BinaryOperator {{.*}} '<dependent type>' '*'
1774b5b0c00SAaron Ballman //CHECK-NEXT: | | |-DeclRefExpr {{.*}} 'C' lvalue ParmVar {{.*}} 'arg' 'C'
1784b5b0c00SAaron Ballman //CHECK-NEXT: | | `-FloatingLiteral {{.*}} '_Float16' 2.000000e+00
1794b5b0c00SAaron Ballman //CHECK-NEXT: | `-FunctionDecl {{.*}} used func1t '_Float16 (_Float16)'
1804b5b0c00SAaron Ballman //CHECK-NEXT: | |-TemplateArgument type '_Float16'
1815eca1d5eSRichard Smith //CHECK: | |-ParmVarDecl {{.*}} used arg '_Float16':'_Float16'
1824b5b0c00SAaron Ballman //CHECK-NEXT: | `-CompoundStmt
1834b5b0c00SAaron Ballman //CHECK-NEXT: | `-ReturnStmt
1844b5b0c00SAaron Ballman //CHECK-NEXT: | `-BinaryOperator {{.*}} '_Float16' '*'
1854b5b0c00SAaron Ballman //CHECK-NEXT: | |-ImplicitCastExpr {{.*}} '_Float16':'_Float16' <LValueToRValue>
1864b5b0c00SAaron Ballman //CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16':'_Float16' lvalue ParmVar {{.*}} 'arg' '_Float16':'_Float16'
1874b5b0c00SAaron Ballman //CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 2.000000e+00
1884b5b0c00SAaron Ballman
1894b5b0c00SAaron Ballman
1904b5b0c00SAaron Ballman template <class C> struct S1 {
1914b5b0c00SAaron Ballman C mem1;
1924b5b0c00SAaron Ballman };
1934b5b0c00SAaron Ballman
1944b5b0c00SAaron Ballman //CHECK: |-ClassTemplateDecl {{.*}} S1
1954b5b0c00SAaron Ballman //CHECK-NEXT: | |-TemplateTypeParmDecl {{.*}} referenced class depth 0 index 0 C
1964b5b0c00SAaron Ballman //CHECK-NEXT: | |-CXXRecordDecl {{.*}} struct S1 definition
1974b5b0c00SAaron Ballman //CHECK: | | |-CXXRecordDecl {{.*}} implicit struct S1
1984b5b0c00SAaron Ballman //CHECK-NEXT: | | `-FieldDecl {{.*}} mem1 'C'
1994b5b0c00SAaron Ballman //CHECK-NEXT: | `-ClassTemplateSpecialization {{.*}} 'S1'
2004b5b0c00SAaron Ballman
2014b5b0c00SAaron Ballman template <> struct S1<_Float16> {
2024b5b0c00SAaron Ballman _Float16 mem2;
2034b5b0c00SAaron Ballman };
2044b5b0c00SAaron Ballman
2054b5b0c00SAaron Ballman
2064b5b0c00SAaron Ballman /* Local */
2074b5b0c00SAaron Ballman
2084b5b0c00SAaron Ballman extern int printf (const char *__restrict __format, ...);
2094b5b0c00SAaron Ballman
main(void)2104b5b0c00SAaron Ballman int main(void) {
2114b5b0c00SAaron Ballman _Float16 f1l = 1e3f16;
2124b5b0c00SAaron Ballman //CHECK: | `-VarDecl {{.*}} used f1l '_Float16' cinit
2134b5b0c00SAaron Ballman //CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+03
2144b5b0c00SAaron Ballman
2154b5b0c00SAaron Ballman _Float16 f2l = -0.f16;
2164b5b0c00SAaron Ballman //CHECK: | `-VarDecl {{.*}} used f2l '_Float16' cinit
2174b5b0c00SAaron Ballman //CHECK-NEXT: | `-UnaryOperator {{.*}} '_Float16' prefix '-'
2184b5b0c00SAaron Ballman //CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 0.000000e+00
2194b5b0c00SAaron Ballman
2204b5b0c00SAaron Ballman _Float16 f3l = 1.000976562;
2214b5b0c00SAaron Ballman //CHECK: | `-VarDecl {{.*}} used f3l '_Float16' cinit
2224b5b0c00SAaron Ballman //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
2234b5b0c00SAaron Ballman //CHECK-NEXT: | `-FloatingLiteral {{.*}} 'double' 1.000977e+00
2244b5b0c00SAaron Ballman
2254b5b0c00SAaron Ballman C1 c1(f1l);
226*888673b6SJonas Devlieghere //CHECK: | `-VarDecl{{.*}} used c1 'C1' callinit
227*888673b6SJonas Devlieghere //CHECK-NEXT: | `-CXXConstructExpr {{.*}} 'C1' 'void (_Float16)
2284b5b0c00SAaron Ballman //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
2294b5b0c00SAaron Ballman //CHECK-NEXT: | `-DeclRefExpr {{.*}} '_Float16' lvalue Var 0x{{.*}} 'f1l' '_Float16'
2304b5b0c00SAaron Ballman
2314b5b0c00SAaron Ballman S1<_Float16> s1 = { 132.f16 };
2324b5b0c00SAaron Ballman //CHECK: | `-VarDecl {{.*}} used s1 'S1<_Float16>':'S1<_Float16>' cinit
2334b5b0c00SAaron Ballman //CHECK-NEXT: | `-InitListExpr {{.*}} 'S1<_Float16>':'S1<_Float16>'
2344b5b0c00SAaron Ballman //CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 1.320000e+02
2354b5b0c00SAaron Ballman
2364b5b0c00SAaron Ballman _Float16 f4l = func1n(f1l) + func1f(f2l) + c1.func1c(f3l) + c1.func2c(f1l) +
2374b5b0c00SAaron Ballman func1t(f1l) + s1.mem2 - f1n + f2n;
2384b5b0c00SAaron Ballman //CHECK: | `-VarDecl {{.*}} used f4l '_Float16' cinit
2394b5b0c00SAaron Ballman //CHECK-NEXT: | `-BinaryOperator {{.*}} '_Float16' '+'
2404b5b0c00SAaron Ballman //CHECK-NEXT: | |-BinaryOperator {{.*}} '_Float16' '-'
2414b5b0c00SAaron Ballman //CHECK-NEXT: | | |-BinaryOperator {{.*}} '_Float16' '+'
2424b5b0c00SAaron Ballman //CHECK-NEXT: | | | |-BinaryOperator {{.*}} '_Float16' '+'
2434b5b0c00SAaron Ballman //CHECK-NEXT: | | | | |-BinaryOperator {{.*}} '_Float16' '+'
2444b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | |-BinaryOperator {{.*}} '_Float16' '+'
2454b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | |-BinaryOperator {{.*}} '_Float16' '+'
2464b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | | |-CallExpr {{.*}} '_Float16'
2474b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | | | |-ImplicitCastExpr {{.*}} 'const volatile _Float16 (*)(const _Float16 &)' <FunctionToPointerDecay>
2484b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | | | | `-DeclRefExpr {{.*}} 'const volatile _Float16 (const _Float16 &)' lvalue Function {{.*}} 'func1n' 'const volatile _Float16 (const _Float16 &)'
2494b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | | | `-ImplicitCastExpr {{.*}} 'const _Float16' lvalue <NoOp>
2504b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f1l' '_Float16'
2514b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | | `-CallExpr {{.*}} '_Float16'
2524b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | | |-ImplicitCastExpr {{.*}} '_Float16 (*)(_Float16)' <FunctionToPointerDecay>
2534b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | | | `-DeclRefExpr {{.*}} '_Float16 (_Float16)' lvalue Function {{.*}} 'func1f' '_Float16 (_Float16)'
2544b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
2554b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2l' '_Float16'
2564b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | `-CXXMemberCallExpr {{.*}} '_Float16'
2574b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | |-MemberExpr {{.*}} '<bound member function type>' .func1c {{.*}}
258*888673b6SJonas Devlieghere //CHECK-NEXT: | | | | | | | `-DeclRefExpr {{.*}} 'C1' lvalue Var {{.*}} 'c1' 'C1'
2594b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
2604b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f3l' '_Float16'
2614b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | `-CallExpr {{.*}} '_Float16'
2624b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | |-ImplicitCastExpr {{.*}} '_Float16 (*)(_Float16)' <FunctionToPointerDecay>
2634b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | | `-MemberExpr {{.*}} '_Float16 (_Float16)' lvalue .func2c {{.*}}
264*888673b6SJonas Devlieghere //CHECK-NEXT: | | | | | | `-DeclRefExpr {{.*}} 'C1' lvalue Var {{.*}} 'c1' 'C1'
2654b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
2664b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f1l' '_Float16'
2674b5b0c00SAaron Ballman //CHECK-NEXT: | | | | `-CallExpr {{.*}} '_Float16':'_Float16'
2684b5b0c00SAaron Ballman //CHECK-NEXT: | | | | |-ImplicitCastExpr {{.*}} '_Float16 (*)(_Float16)' <FunctionToPointerDecay>
2694b5b0c00SAaron Ballman //CHECK-NEXT: | | | | | `-DeclRefExpr {{.*}} '_Float16 (_Float16)' lvalue Function {{.*}} 'func1t' '_Float16 (_Float16)' (FunctionTemplate {{.*}} 'func1t')
2704b5b0c00SAaron Ballman //CHECK-NEXT: | | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
2714b5b0c00SAaron Ballman //CHECK-NEXT: | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f1l' '_Float16'
2724b5b0c00SAaron Ballman //CHECK-NEXT: | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
2734b5b0c00SAaron Ballman //CHECK-NEXT: | | | `-MemberExpr {{.*}} '_Float16' lvalue .mem2 {{.*}}
2744b5b0c00SAaron Ballman //CHECK-NEXT: | | | `-DeclRefExpr {{.*}} 'S1<_Float16>':'S1<_Float16>' lvalue Var {{.*}} 's1' 'S1<_Float16>':'S1<_Float16>'
2754b5b0c00SAaron Ballman //CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
2764b5b0c00SAaron Ballman //CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f1n' '_Float16'
2774b5b0c00SAaron Ballman //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
2784b5b0c00SAaron Ballman //CHECK-NEXT: | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2n' '_Float16'
2794b5b0c00SAaron Ballman
2804b5b0c00SAaron Ballman auto f5l = -1.f16, *f6l = &f2l, f7l = func1t(f3l);
2814b5b0c00SAaron Ballman //CHECK: | |-VarDecl {{.*}} f5l '_Float16':'_Float16' cinit
2824b5b0c00SAaron Ballman //CHECK-NEXT: | | `-UnaryOperator {{.*}} '_Float16' prefix '-'
2834b5b0c00SAaron Ballman //CHECK-NEXT: | | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+00
2844b5b0c00SAaron Ballman //CHECK-NEXT: | |-VarDecl {{.*}} f6l '_Float16 *' cinit
2854b5b0c00SAaron Ballman //CHECK-NEXT: | | `-UnaryOperator {{.*}} '_Float16 *' prefix '&'
2864b5b0c00SAaron Ballman //CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2l' '_Float16'
2874b5b0c00SAaron Ballman //CHECK-NEXT: | `-VarDecl {{.*}} f7l '_Float16':'_Float16' cinit
2884b5b0c00SAaron Ballman //CHECK-NEXT: | `-CallExpr {{.*}} '_Float16':'_Float16'
2894b5b0c00SAaron Ballman //CHECK-NEXT: | |-ImplicitCastExpr {{.*}} '_Float16 (*)(_Float16)' <FunctionToPointerDecay>
2904b5b0c00SAaron Ballman //CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16 (_Float16)' lvalue Function {{.*}} 'func1t' '_Float16 (_Float16)' (FunctionTemplate {{.*}} 'func1t')
2914b5b0c00SAaron Ballman //CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
2924b5b0c00SAaron Ballman //CHECK-NEXT: | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f3l' '_Float16'
2934b5b0c00SAaron Ballman
2944b5b0c00SAaron Ballman _Float16 f8l = f4l++;
2954b5b0c00SAaron Ballman //CHECK: | `-VarDecl {{.*}} f8l '_Float16' cinit
2964b5b0c00SAaron Ballman //CHECK-NEXT: | `-UnaryOperator {{.*}} '_Float16' postfix '++'
2974b5b0c00SAaron Ballman //CHECK-NEXT: | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f4l' '_Float16'
2984b5b0c00SAaron Ballman
2994b5b0c00SAaron Ballman _Float16 arr1l[] = { -1.f16, -0.f16, -11.f16 };
3004b5b0c00SAaron Ballman //CHECK: `-VarDecl {{.*}} arr1l '_Float16[3]' cinit
3014b5b0c00SAaron Ballman //CHECK-NEXT: `-InitListExpr {{.*}} '_Float16[3]'
3024b5b0c00SAaron Ballman //CHECK-NEXT: |-UnaryOperator {{.*}} '_Float16' prefix '-'
3034b5b0c00SAaron Ballman //CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+00
3044b5b0c00SAaron Ballman //CHECK-NEXT: |-UnaryOperator {{.*}} '_Float16' prefix '-'
3054b5b0c00SAaron Ballman //CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 0.000000e+00
3064b5b0c00SAaron Ballman //CHECK-NEXT: `-UnaryOperator {{.*}} '_Float16' prefix '-'
3074b5b0c00SAaron Ballman //CHECK-NEXT: `-FloatingLiteral {{.*}} '_Float16' 1.100000e+01
3084b5b0c00SAaron Ballman
3094b5b0c00SAaron Ballman float cvtf = f2n;
3104b5b0c00SAaron Ballman //CHECK: `-VarDecl {{.*}} cvtf 'float' cinit
3114b5b0c00SAaron Ballman //CHECK-NEXT: `-ImplicitCastExpr {{.*}} 'float' <FloatingCast>
3124b5b0c00SAaron Ballman //CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
3134b5b0c00SAaron Ballman //CHECK-NEXT: `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2n' '_Float16'
3144b5b0c00SAaron Ballman
3154b5b0c00SAaron Ballman double cvtd = f2n;
3164b5b0c00SAaron Ballman //CHECK: `-VarDecl {{.*}} cvtd 'double' cinit
3174b5b0c00SAaron Ballman //CHECK-NEXT: `-ImplicitCastExpr {{.*}} 'double' <FloatingCast>
3184b5b0c00SAaron Ballman //CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
3194b5b0c00SAaron Ballman //CHECK-NEXT: `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2n' '_Float16'
3204b5b0c00SAaron Ballman
3214b5b0c00SAaron Ballman long double cvtld = f2n;
3224b5b0c00SAaron Ballman //CHECK: `-VarDecl {{.*}} cvtld 'long double' cinit
3234b5b0c00SAaron Ballman //CHECK-NEXT: `-ImplicitCastExpr {{.*}} 'long double' <FloatingCast>
3244b5b0c00SAaron Ballman //CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue>
3254b5b0c00SAaron Ballman //CHECK-NEXT: `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2n' '_Float16'
3264b5b0c00SAaron Ballman
3274b5b0c00SAaron Ballman _Float16 f2h = 42.0f;
3284b5b0c00SAaron Ballman //CHECK: `-VarDecl {{.*}} f2h '_Float16' cinit
3294b5b0c00SAaron Ballman //CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
3304b5b0c00SAaron Ballman //CHECK-NEXT: `-FloatingLiteral {{.*}} 'float' 4.200000e+01
3314b5b0c00SAaron Ballman
3324b5b0c00SAaron Ballman _Float16 d2h = 42.0;
3334b5b0c00SAaron Ballman //CHECK: `-VarDecl {{.*}} d2h '_Float16' cinit
3344b5b0c00SAaron Ballman //CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
3354b5b0c00SAaron Ballman //CHECK-NEXT: `-FloatingLiteral {{.*}} 'double' 4.200000e+01
3364b5b0c00SAaron Ballman
3374b5b0c00SAaron Ballman _Float16 ld2h = 42.0l;
3384b5b0c00SAaron Ballman //CHECK: `-VarDecl {{.*}} ld2h '_Float16' cinit
3394b5b0c00SAaron Ballman //CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast>
3404b5b0c00SAaron Ballman //CHECK-NEXT: `-FloatingLiteral {{.*}} 'long double' 4.200000e+01
3414b5b0c00SAaron Ballman }
342