@@ -809,6 +809,8 @@ TypeSystemClang::GetBuiltinTypeForEncodingAndBitSize(Encoding encoding,
809809 return GetType (ast.LongDoubleTy );
810810 if (QualTypeMatchesBitSize (bit_size, ast, ast.HalfTy ))
811811 return GetType (ast.HalfTy );
812+ if (QualTypeMatchesBitSize (bit_size, ast, ast.Float128Ty ))
813+ return GetType (ast.Float128Ty );
812814 break ;
813815
814816 case eEncodingVector:
@@ -970,6 +972,13 @@ CompilerType TypeSystemClang::GetBuiltinTypeForDWARFEncodingAndBitSize(
970972 if (type_name == " long double" &&
971973 QualTypeMatchesBitSize (bit_size, ast, ast.LongDoubleTy ))
972974 return GetType (ast.LongDoubleTy );
975+ // As Rust currently uses `TypeSystemClang`, match `f128` here as well so it
976+ // doesn't get misinterpreted as `long double` on targets where they are
977+ // the same size but different formats.
978+ if ((type_name == " __float128" || type_name == " _Float128" ||
979+ type_name == " f128" ) &&
980+ QualTypeMatchesBitSize (bit_size, ast, ast.Float128Ty ))
981+ return GetType (ast.Float128Ty );
973982 // Fall back to not requiring a name match
974983 if (QualTypeMatchesBitSize (bit_size, ast, ast.FloatTy ))
975984 return GetType (ast.FloatTy );
@@ -979,6 +988,8 @@ CompilerType TypeSystemClang::GetBuiltinTypeForDWARFEncodingAndBitSize(
979988 return GetType (ast.LongDoubleTy );
980989 if (QualTypeMatchesBitSize (bit_size, ast, ast.HalfTy ))
981990 return GetType (ast.HalfTy );
991+ if (QualTypeMatchesBitSize (bit_size, ast, ast.Float128Ty ))
992+ return GetType (ast.Float128Ty );
982993 break ;
983994
984995 case DW_ATE_signed:
@@ -2068,6 +2079,8 @@ TypeSystemClang::GetOpaqueCompilerType(clang::ASTContext *ast,
20682079 return ast->DoubleTy .getAsOpaquePtr ();
20692080 case eBasicTypeLongDouble:
20702081 return ast->LongDoubleTy .getAsOpaquePtr ();
2082+ case eBasicTypeFloat128:
2083+ return ast->Float128Ty .getAsOpaquePtr ();
20712084 case eBasicTypeFloatComplex:
20722085 return ast->getComplexType (ast->FloatTy ).getAsOpaquePtr ();
20732086 case eBasicTypeDoubleComplex:
@@ -4750,6 +4763,8 @@ TypeSystemClang::GetFloatTypeSemantics(size_t byte_size) {
47504763 return ast.getFloatTypeSemantics (ast.LongDoubleTy );
47514764 else if (bit_size == ast.getTypeSize (ast.HalfTy ))
47524765 return ast.getFloatTypeSemantics (ast.HalfTy );
4766+ else if (bit_size == ast.getTypeSize (ast.Float128Ty ))
4767+ return ast.getFloatTypeSemantics (ast.Float128Ty );
47534768 return llvm::APFloatBase::Bogus ();
47544769}
47554770
@@ -5222,6 +5237,8 @@ lldb::Format TypeSystemClang::GetFormat(lldb::opaque_compiler_type_t type) {
52225237 case clang::BuiltinType::Double:
52235238 case clang::BuiltinType::LongDouble:
52245239 return lldb::eFormatFloat;
5240+ case clang::BuiltinType::Float128:
5241+ return lldb::eFormatFloat128;
52255242 default :
52265243 return lldb::eFormatHex;
52275244 }
@@ -5545,6 +5562,8 @@ TypeSystemClang::GetBasicTypeEnumeration(lldb::opaque_compiler_type_t type) {
55455562 return eBasicTypeDouble;
55465563 case clang::BuiltinType::LongDouble:
55475564 return eBasicTypeLongDouble;
5565+ case clang::BuiltinType::Float128:
5566+ return eBasicTypeFloat128;
55485567
55495568 case clang::BuiltinType::NullPtr:
55505569 return eBasicTypeNullPtr;
@@ -6106,6 +6125,7 @@ uint32_t TypeSystemClang::GetNumPointeeChildren(clang::QualType type) {
61066125 case clang::BuiltinType::Float:
61076126 case clang::BuiltinType::Double:
61086127 case clang::BuiltinType::LongDouble:
6128+ case clang::BuiltinType::Float128:
61096129 case clang::BuiltinType::Dependent:
61106130 case clang::BuiltinType::Overload:
61116131 case clang::BuiltinType::ObjCId:
@@ -8837,6 +8857,7 @@ bool TypeSystemClang::DumpTypeValue(
88378857 case eFormatHex:
88388858 case eFormatHexUppercase:
88398859 case eFormatFloat:
8860+ case eFormatFloat128:
88408861 case eFormatOctal:
88418862 case eFormatOSType:
88428863 case eFormatUnsigned:
0 commit comments