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 }; 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: 1194b5b0c00SAaron Ballman C1(_Float16 arg) : f1c(arg), f3c(arg) { } 1204b5b0c00SAaron Ballman _Float16 func1c(_Float16 arg ) { 1214b5b0c00SAaron Ballman return f1c + arg; 1224b5b0c00SAaron Ballman } 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 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' 181*5eca1d5eSRichard 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 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); 2264b5b0c00SAaron Ballman //CHECK: | `-VarDecl{{.*}} used c1 'C1' callinit 2274b5b0c00SAaron Ballman //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 {{.*}} 2584b5b0c00SAaron Ballman //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 {{.*}} 2644b5b0c00SAaron Ballman //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