@@ -790,6 +790,8 @@ TypeSystemClang::GetBuiltinTypeForEncodingAndBitSize(Encoding encoding,
790790 return GetType (ast.LongDoubleTy );
791791 if (QualTypeMatchesBitSize (bit_size, ast, ast.HalfTy ))
792792 return GetType (ast.HalfTy );
793+ if (QualTypeMatchesBitSize (bit_size, ast, ast.Float128Ty ))
794+ return GetType (ast.Float128Ty );
793795 break ;
794796
795797 case eEncodingVector:
@@ -948,6 +950,13 @@ CompilerType TypeSystemClang::GetBuiltinTypeForDWARFEncodingAndBitSize(
948950 if (type_name == " long double" &&
949951 QualTypeMatchesBitSize (bit_size, ast, ast.LongDoubleTy ))
950952 return GetType (ast.LongDoubleTy );
953+ // As Rust currently uses `TypeSystemClang`, match `f128` here as well so it
954+ // doesn't get misinterpreted as `long double` on targets where they are
955+ // the same size but different formats.
956+ if ((type_name == " __float128" || type_name == " _Float128" ||
957+ type_name == " f128" ) &&
958+ QualTypeMatchesBitSize (bit_size, ast, ast.Float128Ty ))
959+ return GetType (ast.Float128Ty );
951960 // Fall back to not requiring a name match
952961 if (QualTypeMatchesBitSize (bit_size, ast, ast.FloatTy ))
953962 return GetType (ast.FloatTy );
@@ -957,6 +966,8 @@ CompilerType TypeSystemClang::GetBuiltinTypeForDWARFEncodingAndBitSize(
957966 return GetType (ast.LongDoubleTy );
958967 if (QualTypeMatchesBitSize (bit_size, ast, ast.HalfTy ))
959968 return GetType (ast.HalfTy );
969+ if (QualTypeMatchesBitSize (bit_size, ast, ast.Float128Ty ))
970+ return GetType (ast.Float128Ty );
960971 break ;
961972
962973 case DW_ATE_signed:
@@ -2050,6 +2061,8 @@ TypeSystemClang::GetOpaqueCompilerType(clang::ASTContext *ast,
20502061 return ast->DoubleTy .getAsOpaquePtr ();
20512062 case eBasicTypeLongDouble:
20522063 return ast->LongDoubleTy .getAsOpaquePtr ();
2064+ case eBasicTypeFloat128:
2065+ return ast->Float128Ty .getAsOpaquePtr ();
20532066 case eBasicTypeFloatComplex:
20542067 return ast->getComplexType (ast->FloatTy ).getAsOpaquePtr ();
20552068 case eBasicTypeDoubleComplex:
@@ -4722,6 +4735,8 @@ TypeSystemClang::GetFloatTypeSemantics(size_t byte_size) {
47224735 return ast.getFloatTypeSemantics (ast.LongDoubleTy );
47234736 else if (bit_size == ast.getTypeSize (ast.HalfTy ))
47244737 return ast.getFloatTypeSemantics (ast.HalfTy );
4738+ else if (bit_size == ast.getTypeSize (ast.Float128Ty ))
4739+ return ast.getFloatTypeSemantics (ast.Float128Ty );
47254740 return llvm::APFloatBase::Bogus ();
47264741}
47274742
@@ -5232,6 +5247,8 @@ lldb::Format TypeSystemClang::GetFormat(lldb::opaque_compiler_type_t type) {
52325247 case clang::BuiltinType::Double:
52335248 case clang::BuiltinType::LongDouble:
52345249 return lldb::eFormatFloat;
5250+ case clang::BuiltinType::Float128:
5251+ return lldb::eFormatFloat128;
52355252 default :
52365253 return lldb::eFormatHex;
52375254 }
@@ -5551,6 +5568,8 @@ TypeSystemClang::GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type) {
55515568 return eBasicTypeDouble;
55525569 case clang::BuiltinType::LongDouble:
55535570 return eBasicTypeLongDouble;
5571+ case clang::BuiltinType::Float128:
5572+ return eBasicTypeFloat128;
55545573
55555574 case clang::BuiltinType::NullPtr:
55565575 return eBasicTypeNullPtr;
@@ -6111,6 +6130,7 @@ uint32_t TypeSystemClang::GetNumPointeeChildren(clang::QualType type) {
61116130 case clang::BuiltinType::Float:
61126131 case clang::BuiltinType::Double:
61136132 case clang::BuiltinType::LongDouble:
6133+ case clang::BuiltinType::Float128:
61146134 case clang::BuiltinType::Dependent:
61156135 case clang::BuiltinType::Overload:
61166136 case clang::BuiltinType::ObjCId:
@@ -8807,6 +8827,7 @@ bool TypeSystemClang::DumpTypeValue(
88078827 case eFormatHex:
88088828 case eFormatHexUppercase:
88098829 case eFormatFloat:
8830+ case eFormatFloat128:
88108831 case eFormatOctal:
88118832 case eFormatOSType:
88128833 case eFormatUnsigned:
0 commit comments