in lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp [4749:5132]
lldb::Encoding TypeSystemClang::GetEncoding(lldb::opaque_compiler_type_t type,
uint64_t &count) {
if (!type)
return lldb::eEncodingInvalid;
count = 1;
clang::QualType qual_type = RemoveWrappingTypes(GetCanonicalQualType(type));
switch (qual_type->getTypeClass()) {
case clang::Type::Atomic:
case clang::Type::Auto:
case clang::Type::Decltype:
case clang::Type::Elaborated:
case clang::Type::Paren:
case clang::Type::Typedef:
case clang::Type::TypeOf:
case clang::Type::TypeOfExpr:
case clang::Type::Using:
llvm_unreachable("Handled in RemoveWrappingTypes!");
case clang::Type::UnaryTransform:
break;
case clang::Type::FunctionNoProto:
case clang::Type::FunctionProto:
break;
case clang::Type::IncompleteArray:
case clang::Type::VariableArray:
break;
case clang::Type::ConstantArray:
break;
case clang::Type::DependentVector:
case clang::Type::ExtVector:
case clang::Type::Vector:
// TODO: Set this to more than one???
break;
case clang::Type::BitInt:
case clang::Type::DependentBitInt:
return qual_type->isUnsignedIntegerType() ? lldb::eEncodingUint
: lldb::eEncodingSint;
case clang::Type::Builtin:
switch (llvm::cast<clang::BuiltinType>(qual_type)->getKind()) {
case clang::BuiltinType::Void:
break;
case clang::BuiltinType::Char_S:
case clang::BuiltinType::SChar:
case clang::BuiltinType::WChar_S:
case clang::BuiltinType::Short:
case clang::BuiltinType::Int:
case clang::BuiltinType::Long:
case clang::BuiltinType::LongLong:
case clang::BuiltinType::Int128:
return lldb::eEncodingSint;
case clang::BuiltinType::Bool:
case clang::BuiltinType::Char_U:
case clang::BuiltinType::UChar:
case clang::BuiltinType::WChar_U:
case clang::BuiltinType::Char8:
case clang::BuiltinType::Char16:
case clang::BuiltinType::Char32:
case clang::BuiltinType::UShort:
case clang::BuiltinType::UInt:
case clang::BuiltinType::ULong:
case clang::BuiltinType::ULongLong:
case clang::BuiltinType::UInt128:
return lldb::eEncodingUint;
// Fixed point types. Note that they are currently ignored.
case clang::BuiltinType::ShortAccum:
case clang::BuiltinType::Accum:
case clang::BuiltinType::LongAccum:
case clang::BuiltinType::UShortAccum:
case clang::BuiltinType::UAccum:
case clang::BuiltinType::ULongAccum:
case clang::BuiltinType::ShortFract:
case clang::BuiltinType::Fract:
case clang::BuiltinType::LongFract:
case clang::BuiltinType::UShortFract:
case clang::BuiltinType::UFract:
case clang::BuiltinType::ULongFract:
case clang::BuiltinType::SatShortAccum:
case clang::BuiltinType::SatAccum:
case clang::BuiltinType::SatLongAccum:
case clang::BuiltinType::SatUShortAccum:
case clang::BuiltinType::SatUAccum:
case clang::BuiltinType::SatULongAccum:
case clang::BuiltinType::SatShortFract:
case clang::BuiltinType::SatFract:
case clang::BuiltinType::SatLongFract:
case clang::BuiltinType::SatUShortFract:
case clang::BuiltinType::SatUFract:
case clang::BuiltinType::SatULongFract:
break;
case clang::BuiltinType::Half:
case clang::BuiltinType::Float:
case clang::BuiltinType::Float16:
case clang::BuiltinType::Float128:
case clang::BuiltinType::Double:
case clang::BuiltinType::LongDouble:
case clang::BuiltinType::BFloat16:
case clang::BuiltinType::Ibm128:
return lldb::eEncodingIEEE754;
case clang::BuiltinType::ObjCClass:
case clang::BuiltinType::ObjCId:
case clang::BuiltinType::ObjCSel:
return lldb::eEncodingUint;
case clang::BuiltinType::NullPtr:
return lldb::eEncodingUint;
case clang::BuiltinType::Kind::ARCUnbridgedCast:
case clang::BuiltinType::Kind::BoundMember:
case clang::BuiltinType::Kind::BuiltinFn:
case clang::BuiltinType::Kind::Dependent:
case clang::BuiltinType::Kind::OCLClkEvent:
case clang::BuiltinType::Kind::OCLEvent:
case clang::BuiltinType::Kind::OCLImage1dRO:
case clang::BuiltinType::Kind::OCLImage1dWO:
case clang::BuiltinType::Kind::OCLImage1dRW:
case clang::BuiltinType::Kind::OCLImage1dArrayRO:
case clang::BuiltinType::Kind::OCLImage1dArrayWO:
case clang::BuiltinType::Kind::OCLImage1dArrayRW:
case clang::BuiltinType::Kind::OCLImage1dBufferRO:
case clang::BuiltinType::Kind::OCLImage1dBufferWO:
case clang::BuiltinType::Kind::OCLImage1dBufferRW:
case clang::BuiltinType::Kind::OCLImage2dRO:
case clang::BuiltinType::Kind::OCLImage2dWO:
case clang::BuiltinType::Kind::OCLImage2dRW:
case clang::BuiltinType::Kind::OCLImage2dArrayRO:
case clang::BuiltinType::Kind::OCLImage2dArrayWO:
case clang::BuiltinType::Kind::OCLImage2dArrayRW:
case clang::BuiltinType::Kind::OCLImage2dArrayDepthRO:
case clang::BuiltinType::Kind::OCLImage2dArrayDepthWO:
case clang::BuiltinType::Kind::OCLImage2dArrayDepthRW:
case clang::BuiltinType::Kind::OCLImage2dArrayMSAARO:
case clang::BuiltinType::Kind::OCLImage2dArrayMSAAWO:
case clang::BuiltinType::Kind::OCLImage2dArrayMSAARW:
case clang::BuiltinType::Kind::OCLImage2dArrayMSAADepthRO:
case clang::BuiltinType::Kind::OCLImage2dArrayMSAADepthWO:
case clang::BuiltinType::Kind::OCLImage2dArrayMSAADepthRW:
case clang::BuiltinType::Kind::OCLImage2dDepthRO:
case clang::BuiltinType::Kind::OCLImage2dDepthWO:
case clang::BuiltinType::Kind::OCLImage2dDepthRW:
case clang::BuiltinType::Kind::OCLImage2dMSAARO:
case clang::BuiltinType::Kind::OCLImage2dMSAAWO:
case clang::BuiltinType::Kind::OCLImage2dMSAARW:
case clang::BuiltinType::Kind::OCLImage2dMSAADepthRO:
case clang::BuiltinType::Kind::OCLImage2dMSAADepthWO:
case clang::BuiltinType::Kind::OCLImage2dMSAADepthRW:
case clang::BuiltinType::Kind::OCLImage3dRO:
case clang::BuiltinType::Kind::OCLImage3dWO:
case clang::BuiltinType::Kind::OCLImage3dRW:
case clang::BuiltinType::Kind::OCLQueue:
case clang::BuiltinType::Kind::OCLReserveID:
case clang::BuiltinType::Kind::OCLSampler:
case clang::BuiltinType::Kind::OMPArraySection:
case clang::BuiltinType::Kind::OMPArrayShaping:
case clang::BuiltinType::Kind::OMPIterator:
case clang::BuiltinType::Kind::Overload:
case clang::BuiltinType::Kind::PseudoObject:
case clang::BuiltinType::Kind::UnknownAny:
break;
case clang::BuiltinType::OCLIntelSubgroupAVCMcePayload:
case clang::BuiltinType::OCLIntelSubgroupAVCImePayload:
case clang::BuiltinType::OCLIntelSubgroupAVCRefPayload:
case clang::BuiltinType::OCLIntelSubgroupAVCSicPayload:
case clang::BuiltinType::OCLIntelSubgroupAVCMceResult:
case clang::BuiltinType::OCLIntelSubgroupAVCImeResult:
case clang::BuiltinType::OCLIntelSubgroupAVCRefResult:
case clang::BuiltinType::OCLIntelSubgroupAVCSicResult:
case clang::BuiltinType::OCLIntelSubgroupAVCImeResultSingleRefStreamout:
case clang::BuiltinType::OCLIntelSubgroupAVCImeResultDualRefStreamout:
case clang::BuiltinType::OCLIntelSubgroupAVCImeSingleRefStreamin:
case clang::BuiltinType::OCLIntelSubgroupAVCImeDualRefStreamin:
break;
// PowerPC -- Matrix Multiply Assist
case clang::BuiltinType::VectorPair:
case clang::BuiltinType::VectorQuad:
break;
// ARM -- Scalable Vector Extension
case clang::BuiltinType::SveBool:
case clang::BuiltinType::SveInt8:
case clang::BuiltinType::SveInt8x2:
case clang::BuiltinType::SveInt8x3:
case clang::BuiltinType::SveInt8x4:
case clang::BuiltinType::SveInt16:
case clang::BuiltinType::SveInt16x2:
case clang::BuiltinType::SveInt16x3:
case clang::BuiltinType::SveInt16x4:
case clang::BuiltinType::SveInt32:
case clang::BuiltinType::SveInt32x2:
case clang::BuiltinType::SveInt32x3:
case clang::BuiltinType::SveInt32x4:
case clang::BuiltinType::SveInt64:
case clang::BuiltinType::SveInt64x2:
case clang::BuiltinType::SveInt64x3:
case clang::BuiltinType::SveInt64x4:
case clang::BuiltinType::SveUint8:
case clang::BuiltinType::SveUint8x2:
case clang::BuiltinType::SveUint8x3:
case clang::BuiltinType::SveUint8x4:
case clang::BuiltinType::SveUint16:
case clang::BuiltinType::SveUint16x2:
case clang::BuiltinType::SveUint16x3:
case clang::BuiltinType::SveUint16x4:
case clang::BuiltinType::SveUint32:
case clang::BuiltinType::SveUint32x2:
case clang::BuiltinType::SveUint32x3:
case clang::BuiltinType::SveUint32x4:
case clang::BuiltinType::SveUint64:
case clang::BuiltinType::SveUint64x2:
case clang::BuiltinType::SveUint64x3:
case clang::BuiltinType::SveUint64x4:
case clang::BuiltinType::SveFloat16:
case clang::BuiltinType::SveBFloat16:
case clang::BuiltinType::SveBFloat16x2:
case clang::BuiltinType::SveBFloat16x3:
case clang::BuiltinType::SveBFloat16x4:
case clang::BuiltinType::SveFloat16x2:
case clang::BuiltinType::SveFloat16x3:
case clang::BuiltinType::SveFloat16x4:
case clang::BuiltinType::SveFloat32:
case clang::BuiltinType::SveFloat32x2:
case clang::BuiltinType::SveFloat32x3:
case clang::BuiltinType::SveFloat32x4:
case clang::BuiltinType::SveFloat64:
case clang::BuiltinType::SveFloat64x2:
case clang::BuiltinType::SveFloat64x3:
case clang::BuiltinType::SveFloat64x4:
break;
// RISC-V V builtin types.
case clang::BuiltinType::RvvInt8mf8:
case clang::BuiltinType::RvvInt8mf4:
case clang::BuiltinType::RvvInt8mf2:
case clang::BuiltinType::RvvInt8m1:
case clang::BuiltinType::RvvInt8m2:
case clang::BuiltinType::RvvInt8m4:
case clang::BuiltinType::RvvInt8m8:
case clang::BuiltinType::RvvUint8mf8:
case clang::BuiltinType::RvvUint8mf4:
case clang::BuiltinType::RvvUint8mf2:
case clang::BuiltinType::RvvUint8m1:
case clang::BuiltinType::RvvUint8m2:
case clang::BuiltinType::RvvUint8m4:
case clang::BuiltinType::RvvUint8m8:
case clang::BuiltinType::RvvInt16mf4:
case clang::BuiltinType::RvvInt16mf2:
case clang::BuiltinType::RvvInt16m1:
case clang::BuiltinType::RvvInt16m2:
case clang::BuiltinType::RvvInt16m4:
case clang::BuiltinType::RvvInt16m8:
case clang::BuiltinType::RvvUint16mf4:
case clang::BuiltinType::RvvUint16mf2:
case clang::BuiltinType::RvvUint16m1:
case clang::BuiltinType::RvvUint16m2:
case clang::BuiltinType::RvvUint16m4:
case clang::BuiltinType::RvvUint16m8:
case clang::BuiltinType::RvvInt32mf2:
case clang::BuiltinType::RvvInt32m1:
case clang::BuiltinType::RvvInt32m2:
case clang::BuiltinType::RvvInt32m4:
case clang::BuiltinType::RvvInt32m8:
case clang::BuiltinType::RvvUint32mf2:
case clang::BuiltinType::RvvUint32m1:
case clang::BuiltinType::RvvUint32m2:
case clang::BuiltinType::RvvUint32m4:
case clang::BuiltinType::RvvUint32m8:
case clang::BuiltinType::RvvInt64m1:
case clang::BuiltinType::RvvInt64m2:
case clang::BuiltinType::RvvInt64m4:
case clang::BuiltinType::RvvInt64m8:
case clang::BuiltinType::RvvUint64m1:
case clang::BuiltinType::RvvUint64m2:
case clang::BuiltinType::RvvUint64m4:
case clang::BuiltinType::RvvUint64m8:
case clang::BuiltinType::RvvFloat16mf4:
case clang::BuiltinType::RvvFloat16mf2:
case clang::BuiltinType::RvvFloat16m1:
case clang::BuiltinType::RvvFloat16m2:
case clang::BuiltinType::RvvFloat16m4:
case clang::BuiltinType::RvvFloat16m8:
case clang::BuiltinType::RvvFloat32mf2:
case clang::BuiltinType::RvvFloat32m1:
case clang::BuiltinType::RvvFloat32m2:
case clang::BuiltinType::RvvFloat32m4:
case clang::BuiltinType::RvvFloat32m8:
case clang::BuiltinType::RvvFloat64m1:
case clang::BuiltinType::RvvFloat64m2:
case clang::BuiltinType::RvvFloat64m4:
case clang::BuiltinType::RvvFloat64m8:
case clang::BuiltinType::RvvBool1:
case clang::BuiltinType::RvvBool2:
case clang::BuiltinType::RvvBool4:
case clang::BuiltinType::RvvBool8:
case clang::BuiltinType::RvvBool16:
case clang::BuiltinType::RvvBool32:
case clang::BuiltinType::RvvBool64:
break;
case clang::BuiltinType::IncompleteMatrixIdx:
break;
}
break;
// All pointer types are represented as unsigned integer encodings. We may
// nee to add a eEncodingPointer if we ever need to know the difference
case clang::Type::ObjCObjectPointer:
case clang::Type::BlockPointer:
case clang::Type::Pointer:
case clang::Type::LValueReference:
case clang::Type::RValueReference:
case clang::Type::MemberPointer:
return lldb::eEncodingUint;
case clang::Type::Complex: {
lldb::Encoding encoding = lldb::eEncodingIEEE754;
if (qual_type->isComplexType())
encoding = lldb::eEncodingIEEE754;
else {
const clang::ComplexType *complex_type =
qual_type->getAsComplexIntegerType();
if (complex_type)
encoding = GetType(complex_type->getElementType()).GetEncoding(count);
else
encoding = lldb::eEncodingSint;
}
count = 2;
return encoding;
}
case clang::Type::ObjCInterface:
break;
case clang::Type::Record:
break;
case clang::Type::Enum:
return lldb::eEncodingSint;
case clang::Type::DependentSizedArray:
case clang::Type::DependentSizedExtVector:
case clang::Type::UnresolvedUsing:
case clang::Type::Attributed:
case clang::Type::TemplateTypeParm:
case clang::Type::SubstTemplateTypeParm:
case clang::Type::SubstTemplateTypeParmPack:
case clang::Type::InjectedClassName:
case clang::Type::DependentName:
case clang::Type::DependentTemplateSpecialization:
case clang::Type::PackExpansion:
case clang::Type::ObjCObject:
case clang::Type::TemplateSpecialization:
case clang::Type::DeducedTemplateSpecialization:
case clang::Type::Adjusted:
case clang::Type::Pipe:
break;
// pointer type decayed from an array or function type.
case clang::Type::Decayed:
break;
case clang::Type::ObjCTypeParam:
break;
case clang::Type::DependentAddressSpace:
break;
case clang::Type::MacroQualified:
break;
case clang::Type::ConstantMatrix:
case clang::Type::DependentSizedMatrix:
break;
}
count = 0;
return lldb::eEncodingInvalid;
}