913 llvm::StringRef type_name, uint32_t dw_ate, uint32_t bit_size) {
932 return GetType(ast.UnsignedCharTy);
934 return GetType(ast.UnsignedShortTy);
936 return GetType(ast.UnsignedIntTy);
941 if (type_name.contains(
"complex")) {
950 case DW_ATE_complex_float: {
951 CanQualType FloatComplexTy = ast.getComplexType(ast.FloatTy);
953 return GetType(FloatComplexTy);
955 CanQualType DoubleComplexTy = ast.getComplexType(ast.DoubleTy);
957 return GetType(DoubleComplexTy);
959 CanQualType LongDoubleComplexTy = ast.getComplexType(ast.LongDoubleTy);
961 return GetType(LongDoubleComplexTy);
971 if (type_name ==
"float" &&
974 if (type_name ==
"double" &&
977 if (type_name ==
"long double" &&
979 return GetType(ast.LongDoubleTy);
980 if (type_name ==
"__bf16" &&
982 return GetType(ast.BFloat16Ty);
983 if (type_name ==
"_Float16" &&
989 if ((type_name ==
"__float128" || type_name ==
"_Float128" ||
990 type_name ==
"f128") &&
992 return GetType(ast.Float128Ty);
999 return GetType(ast.LongDoubleTy);
1003 return GetType(ast.Float128Ty);
1007 if (!type_name.empty()) {
1008 if (type_name.starts_with(
"_BitInt"))
1009 return GetType(ast.getBitIntType(
false, bit_size));
1010 if (type_name ==
"wchar_t" &&
1015 if (type_name ==
"void" &&
1018 if (type_name.contains(
"long long") &&
1020 return GetType(ast.LongLongTy);
1021 if (type_name.contains(
"long") &&
1024 if (type_name.contains(
"short") &&
1027 if (type_name.contains(
"char")) {
1031 return GetType(ast.SignedCharTy);
1033 if (type_name.contains(
"int")) {
1050 return GetType(ast.LongLongTy);
1055 case DW_ATE_signed_char:
1056 if (type_name ==
"char") {
1061 return GetType(ast.SignedCharTy);
1064 case DW_ATE_unsigned:
1065 if (!type_name.empty()) {
1066 if (type_name.starts_with(
"unsigned _BitInt"))
1067 return GetType(ast.getBitIntType(
true, bit_size));
1068 if (type_name ==
"wchar_t") {
1075 if (type_name.contains(
"long long")) {
1077 return GetType(ast.UnsignedLongLongTy);
1078 }
else if (type_name.contains(
"long")) {
1080 return GetType(ast.UnsignedLongTy);
1081 }
else if (type_name.contains(
"short")) {
1083 return GetType(ast.UnsignedShortTy);
1084 }
else if (type_name.contains(
"char")) {
1086 return GetType(ast.UnsignedCharTy);
1087 }
else if (type_name.contains(
"int")) {
1089 return GetType(ast.UnsignedIntTy);
1091 return GetType(ast.UnsignedInt128Ty);
1096 return GetType(ast.UnsignedCharTy);
1098 return GetType(ast.UnsignedShortTy);
1100 return GetType(ast.UnsignedIntTy);
1102 return GetType(ast.UnsignedLongTy);
1104 return GetType(ast.UnsignedLongLongTy);
1106 return GetType(ast.UnsignedInt128Ty);
1109 case DW_ATE_unsigned_char:
1110 if (type_name ==
"char") {
1115 return GetType(ast.UnsignedCharTy);
1117 return GetType(ast.UnsignedShortTy);
1120 case DW_ATE_imaginary_float:
1132 if (!type_name.empty()) {
1133 if (type_name ==
"char16_t")
1135 if (type_name ==
"char32_t")
1137 if (type_name ==
"char8_t")
1146 "error: need to add support for DW_TAG_base_type '{0}' "
1147 "encoded with DW_ATE = {1:x}, bit_size = {2}",
1148 type_name, dw_ate, bit_size);
3799 if (pointee_or_element_clang_type)
3800 pointee_or_element_clang_type->
Clear();
3802 clang::QualType qual_type =
3805 const clang::Type::TypeClass type_class = qual_type->getTypeClass();
3806 switch (type_class) {
3807 case clang::Type::Attributed:
3808 return GetTypeInfo(qual_type->castAs<clang::AttributedType>()
3811 pointee_or_element_clang_type);
3812 case clang::Type::BitInt: {
3813 uint32_t type_flags = eTypeIsScalar | eTypeIsInteger | eTypeHasValue;
3814 if (qual_type->isSignedIntegerType())
3815 type_flags |= eTypeIsSigned;
3819 case clang::Type::Builtin: {
3820 const clang::BuiltinType *builtin_type =
3821 llvm::cast<clang::BuiltinType>(qual_type->getCanonicalTypeInternal());
3823 uint32_t builtin_type_flags = eTypeIsBuiltIn | eTypeHasValue;
3824 switch (builtin_type->getKind()) {
3825 case clang::BuiltinType::ObjCId:
3826 case clang::BuiltinType::ObjCClass:
3827 if (pointee_or_element_clang_type)
3831 builtin_type_flags |= eTypeIsPointer | eTypeIsObjC;
3834 case clang::BuiltinType::ObjCSel:
3835 if (pointee_or_element_clang_type)
3838 builtin_type_flags |= eTypeIsPointer | eTypeIsObjC;
3841 case clang::BuiltinType::Bool:
3842 case clang::BuiltinType::Char_U:
3843 case clang::BuiltinType::UChar:
3844 case clang::BuiltinType::WChar_U:
3845 case clang::BuiltinType::Char16:
3846 case clang::BuiltinType::Char32:
3847 case clang::BuiltinType::UShort:
3848 case clang::BuiltinType::UInt:
3849 case clang::BuiltinType::ULong:
3850 case clang::BuiltinType::ULongLong:
3851 case clang::BuiltinType::UInt128:
3852 case clang::BuiltinType::Char_S:
3853 case clang::BuiltinType::SChar:
3854 case clang::BuiltinType::WChar_S:
3855 case clang::BuiltinType::Short:
3856 case clang::BuiltinType::Int:
3857 case clang::BuiltinType::Long:
3858 case clang::BuiltinType::LongLong:
3859 case clang::BuiltinType::Int128:
3860 case clang::BuiltinType::Float:
3861 case clang::BuiltinType::Double:
3862 case clang::BuiltinType::LongDouble:
3863 builtin_type_flags |= eTypeIsScalar;
3864 if (builtin_type->isInteger()) {
3865 builtin_type_flags |= eTypeIsInteger;
3866 if (builtin_type->isSignedInteger())
3867 builtin_type_flags |= eTypeIsSigned;
3868 }
else if (builtin_type->isFloatingPoint())
3869 builtin_type_flags |= eTypeIsFloat;
3874 return builtin_type_flags;
3877 case clang::Type::BlockPointer:
3878 if (pointee_or_element_clang_type)
3880 weak_from_this(), qual_type->getPointeeType().getAsOpaquePtr());
3881 return eTypeIsPointer | eTypeHasChildren | eTypeIsBlock;
3883 case clang::Type::Complex: {
3884 uint32_t complex_type_flags =
3885 eTypeIsBuiltIn | eTypeHasValue | eTypeIsComplex;
3886 const clang::ComplexType *complex_type = llvm::dyn_cast<clang::ComplexType>(
3887 qual_type->getCanonicalTypeInternal());
3889 clang::QualType complex_element_type(complex_type->getElementType());
3890 if (complex_element_type->isIntegerType())
3891 complex_type_flags |= eTypeIsInteger;
3892 else if (complex_element_type->isFloatingType())
3893 complex_type_flags |= eTypeIsFloat;
3895 return complex_type_flags;
3898 case clang::Type::ConstantArray:
3899 case clang::Type::DependentSizedArray:
3900 case clang::Type::IncompleteArray:
3901 case clang::Type::VariableArray:
3902 if (pointee_or_element_clang_type)
3904 weak_from_this(), llvm::cast<clang::ArrayType>(qual_type.getTypePtr())
3907 return eTypeHasChildren | eTypeIsArray;
3909 case clang::Type::DependentName:
3911 case clang::Type::DependentSizedExtVector:
3912 return eTypeHasChildren | eTypeIsVector;
3914 case clang::Type::Enum:
3915 if (pointee_or_element_clang_type)
3917 weak_from_this(), llvm::cast<clang::EnumType>(qual_type)
3919 ->getDefinitionOrSelf()
3922 return eTypeIsEnumeration | eTypeHasValue;
3924 case clang::Type::FunctionProto:
3925 return eTypeIsFuncPrototype | eTypeHasValue;
3926 case clang::Type::FunctionNoProto:
3927 return eTypeIsFuncPrototype | eTypeHasValue;
3928 case clang::Type::InjectedClassName:
3931 case clang::Type::LValueReference:
3932 case clang::Type::RValueReference:
3933 if (pointee_or_element_clang_type)
3936 llvm::cast<clang::ReferenceType>(qual_type.getTypePtr())
3939 return eTypeHasChildren | eTypeIsReference | eTypeHasValue;
3941 case clang::Type::MemberPointer:
3942 return eTypeIsPointer | eTypeIsMember | eTypeHasValue;
3944 case clang::Type::ObjCObjectPointer:
3945 if (pointee_or_element_clang_type)
3947 weak_from_this(), qual_type->getPointeeType().getAsOpaquePtr());
3948 return eTypeHasChildren | eTypeIsObjC | eTypeIsClass | eTypeIsPointer |
3951 case clang::Type::ObjCObject:
3952 return eTypeHasChildren | eTypeIsObjC | eTypeIsClass;
3953 case clang::Type::ObjCInterface:
3954 return eTypeHasChildren | eTypeIsObjC | eTypeIsClass;
3956 case clang::Type::Pointer:
3957 if (pointee_or_element_clang_type)
3959 weak_from_this(), qual_type->getPointeeType().getAsOpaquePtr());
3960 return eTypeHasChildren | eTypeIsPointer | eTypeHasValue;
3962 case clang::Type::Record:
3963 if (qual_type->getAsCXXRecordDecl())
3964 return eTypeHasChildren | eTypeIsClass | eTypeIsCPlusPlus;
3966 return eTypeHasChildren | eTypeIsStructUnion;
3968 case clang::Type::SubstTemplateTypeParm:
3969 return eTypeIsTemplate;
3970 case clang::Type::TemplateTypeParm:
3971 return eTypeIsTemplate;
3972 case clang::Type::TemplateSpecialization:
3973 return eTypeIsTemplate;
3975 case clang::Type::Typedef:
3976 return eTypeIsTypedef |
GetType(llvm::cast<clang::TypedefType>(qual_type)
3978 ->getUnderlyingType())
3980 case clang::Type::UnresolvedUsing:
3983 case clang::Type::ExtVector:
3984 case clang::Type::Vector: {
3985 uint32_t vector_type_flags = eTypeHasChildren | eTypeIsVector;
3986 const clang::VectorType *vector_type = llvm::dyn_cast<clang::VectorType>(
3987 qual_type->getCanonicalTypeInternal());
3991 QualType element_type = vector_type->getElementType();
3992 if (element_type.isNull())
3995 if (element_type->isIntegerType())
3996 vector_type_flags |= eTypeIsInteger;
3997 else if (element_type->isFloatingType())
3998 vector_type_flags |= eTypeIsFloat;
3999 return vector_type_flags;
4805 switch (qual_type->getTypeClass()) {
4806 case clang::Type::Atomic:
4807 case clang::Type::Auto:
4808 case clang::Type::CountAttributed:
4809 case clang::Type::Decltype:
4810 case clang::Type::Paren:
4811 case clang::Type::Typedef:
4812 case clang::Type::TypeOf:
4813 case clang::Type::TypeOfExpr:
4814 case clang::Type::Using:
4815 case clang::Type::PredefinedSugar:
4816 llvm_unreachable(
"Handled in RemoveWrappingTypes!");
4817 case clang::Type::LateParsedAttr:
4818 llvm_unreachable(
"LateParsedAttrType is a transient parsing placeholder "
4819 "that is resolved before the AST is finalized.");
4821 case clang::Type::UnaryTransform:
4824 case clang::Type::FunctionNoProto:
4825 case clang::Type::FunctionProto:
4828 case clang::Type::IncompleteArray:
4829 case clang::Type::VariableArray:
4830 case clang::Type::ArrayParameter:
4833 case clang::Type::ConstantArray:
4836 case clang::Type::DependentVector:
4837 case clang::Type::ExtVector:
4838 case clang::Type::Vector:
4841 case clang::Type::BitInt:
4842 case clang::Type::DependentBitInt:
4843 case clang::Type::OverflowBehavior:
4847 case clang::Type::Builtin:
4848 switch (llvm::cast<clang::BuiltinType>(qual_type)->getKind()) {
4849 case clang::BuiltinType::Void:
4852 case clang::BuiltinType::Char_S:
4853 case clang::BuiltinType::SChar:
4854 case clang::BuiltinType::WChar_S:
4855 case clang::BuiltinType::Short:
4856 case clang::BuiltinType::Int:
4857 case clang::BuiltinType::Long:
4858 case clang::BuiltinType::LongLong:
4859 case clang::BuiltinType::Int128:
4862 case clang::BuiltinType::Bool:
4863 case clang::BuiltinType::Char_U:
4864 case clang::BuiltinType::UChar:
4865 case clang::BuiltinType::WChar_U:
4866 case clang::BuiltinType::Char8:
4867 case clang::BuiltinType::Char16:
4868 case clang::BuiltinType::Char32:
4869 case clang::BuiltinType::UShort:
4870 case clang::BuiltinType::UInt:
4871 case clang::BuiltinType::ULong:
4872 case clang::BuiltinType::ULongLong:
4873 case clang::BuiltinType::UInt128:
4877 case clang::BuiltinType::ShortAccum:
4878 case clang::BuiltinType::Accum:
4879 case clang::BuiltinType::LongAccum:
4880 case clang::BuiltinType::UShortAccum:
4881 case clang::BuiltinType::UAccum:
4882 case clang::BuiltinType::ULongAccum:
4883 case clang::BuiltinType::ShortFract:
4884 case clang::BuiltinType::Fract:
4885 case clang::BuiltinType::LongFract:
4886 case clang::BuiltinType::UShortFract:
4887 case clang::BuiltinType::UFract:
4888 case clang::BuiltinType::ULongFract:
4889 case clang::BuiltinType::SatShortAccum:
4890 case clang::BuiltinType::SatAccum:
4891 case clang::BuiltinType::SatLongAccum:
4892 case clang::BuiltinType::SatUShortAccum:
4893 case clang::BuiltinType::SatUAccum:
4894 case clang::BuiltinType::SatULongAccum:
4895 case clang::BuiltinType::SatShortFract:
4896 case clang::BuiltinType::SatFract:
4897 case clang::BuiltinType::SatLongFract:
4898 case clang::BuiltinType::SatUShortFract:
4899 case clang::BuiltinType::SatUFract:
4900 case clang::BuiltinType::SatULongFract:
4903 case clang::BuiltinType::Half:
4904 case clang::BuiltinType::Float:
4905 case clang::BuiltinType::Float16:
4906 case clang::BuiltinType::Float128:
4907 case clang::BuiltinType::Double:
4908 case clang::BuiltinType::LongDouble:
4909 case clang::BuiltinType::BFloat16:
4910 case clang::BuiltinType::Ibm128:
4913 case clang::BuiltinType::ObjCClass:
4914 case clang::BuiltinType::ObjCId:
4915 case clang::BuiltinType::ObjCSel:
4918 case clang::BuiltinType::NullPtr:
4921 case clang::BuiltinType::Kind::ARCUnbridgedCast:
4922 case clang::BuiltinType::Kind::BoundMember:
4923 case clang::BuiltinType::Kind::BuiltinFn:
4924 case clang::BuiltinType::Kind::Dependent:
4925 case clang::BuiltinType::Kind::OCLClkEvent:
4926 case clang::BuiltinType::Kind::OCLEvent:
4927 case clang::BuiltinType::Kind::OCLImage1dRO:
4928 case clang::BuiltinType::Kind::OCLImage1dWO:
4929 case clang::BuiltinType::Kind::OCLImage1dRW:
4930 case clang::BuiltinType::Kind::OCLImage1dArrayRO:
4931 case clang::BuiltinType::Kind::OCLImage1dArrayWO:
4932 case clang::BuiltinType::Kind::OCLImage1dArrayRW:
4933 case clang::BuiltinType::Kind::OCLImage1dBufferRO:
4934 case clang::BuiltinType::Kind::OCLImage1dBufferWO:
4935 case clang::BuiltinType::Kind::OCLImage1dBufferRW:
4936 case clang::BuiltinType::Kind::OCLImage2dRO:
4937 case clang::BuiltinType::Kind::OCLImage2dWO:
4938 case clang::BuiltinType::Kind::OCLImage2dRW:
4939 case clang::BuiltinType::Kind::OCLImage2dArrayRO:
4940 case clang::BuiltinType::Kind::OCLImage2dArrayWO:
4941 case clang::BuiltinType::Kind::OCLImage2dArrayRW:
4942 case clang::BuiltinType::Kind::OCLImage2dArrayDepthRO:
4943 case clang::BuiltinType::Kind::OCLImage2dArrayDepthWO:
4944 case clang::BuiltinType::Kind::OCLImage2dArrayDepthRW:
4945 case clang::BuiltinType::Kind::OCLImage2dArrayMSAARO:
4946 case clang::BuiltinType::Kind::OCLImage2dArrayMSAAWO:
4947 case clang::BuiltinType::Kind::OCLImage2dArrayMSAARW:
4948 case clang::BuiltinType::Kind::OCLImage2dArrayMSAADepthRO:
4949 case clang::BuiltinType::Kind::OCLImage2dArrayMSAADepthWO:
4950 case clang::BuiltinType::Kind::OCLImage2dArrayMSAADepthRW:
4951 case clang::BuiltinType::Kind::OCLImage2dDepthRO:
4952 case clang::BuiltinType::Kind::OCLImage2dDepthWO:
4953 case clang::BuiltinType::Kind::OCLImage2dDepthRW:
4954 case clang::BuiltinType::Kind::OCLImage2dMSAARO:
4955 case clang::BuiltinType::Kind::OCLImage2dMSAAWO:
4956 case clang::BuiltinType::Kind::OCLImage2dMSAARW:
4957 case clang::BuiltinType::Kind::OCLImage2dMSAADepthRO:
4958 case clang::BuiltinType::Kind::OCLImage2dMSAADepthWO:
4959 case clang::BuiltinType::Kind::OCLImage2dMSAADepthRW:
4960 case clang::BuiltinType::Kind::OCLImage3dRO:
4961 case clang::BuiltinType::Kind::OCLImage3dWO:
4962 case clang::BuiltinType::Kind::OCLImage3dRW:
4963 case clang::BuiltinType::Kind::OCLQueue:
4964 case clang::BuiltinType::Kind::OCLReserveID:
4965 case clang::BuiltinType::Kind::OCLSampler:
4966 case clang::BuiltinType::Kind::HLSLResource:
4967 case clang::BuiltinType::Kind::ArraySection:
4968 case clang::BuiltinType::Kind::OMPArrayShaping:
4969 case clang::BuiltinType::Kind::OMPIterator:
4970 case clang::BuiltinType::Kind::Overload:
4971 case clang::BuiltinType::Kind::PseudoObject:
4972 case clang::BuiltinType::Kind::UnknownAny:
4975 case clang::BuiltinType::OCLIntelSubgroupAVCMcePayload:
4976 case clang::BuiltinType::OCLIntelSubgroupAVCImePayload:
4977 case clang::BuiltinType::OCLIntelSubgroupAVCRefPayload:
4978 case clang::BuiltinType::OCLIntelSubgroupAVCSicPayload:
4979 case clang::BuiltinType::OCLIntelSubgroupAVCMceResult:
4980 case clang::BuiltinType::OCLIntelSubgroupAVCImeResult:
4981 case clang::BuiltinType::OCLIntelSubgroupAVCRefResult:
4982 case clang::BuiltinType::OCLIntelSubgroupAVCSicResult:
4983 case clang::BuiltinType::OCLIntelSubgroupAVCImeResultSingleReferenceStreamout:
4984 case clang::BuiltinType::OCLIntelSubgroupAVCImeResultDualReferenceStreamout:
4985 case clang::BuiltinType::OCLIntelSubgroupAVCImeSingleReferenceStreamin:
4986 case clang::BuiltinType::OCLIntelSubgroupAVCImeDualReferenceStreamin:
4990 case clang::BuiltinType::VectorPair:
4991 case clang::BuiltinType::VectorQuad:
4992 case clang::BuiltinType::DMR1024:
4993 case clang::BuiltinType::DMR2048:
4997#define SVE_TYPE(Name, Id, SingletonId) case clang::BuiltinType::Id:
4998#include "clang/Basic/AArch64ACLETypes.def"
5002#define RVV_TYPE(Name, Id, SingletonId) case clang::BuiltinType::Id:
5003#include "clang/Basic/RISCVVTypes.def"
5007 case clang::BuiltinType::WasmExternRef:
5010 case clang::BuiltinType::IncompleteMatrixIdx:
5013 case clang::BuiltinType::UnresolvedTemplate:
5017#define AMDGPU_TYPE(Name, Id, SingletonId, Width, Align) \
5018 case clang::BuiltinType::Id:
5019#include "clang/Basic/AMDGPUTypes.def"
5023#define SPIRV_TYPE(Name, Id, SingletonId) case clang::BuiltinType::Id:
5024#include "clang/Basic/SPIRVTypes.def"
5030 case clang::Type::ObjCObjectPointer:
5031 case clang::Type::BlockPointer:
5032 case clang::Type::Pointer:
5033 case clang::Type::LValueReference:
5034 case clang::Type::RValueReference:
5035 case clang::Type::MemberPointer:
5037 case clang::Type::Complex: {
5039 if (qual_type->isComplexType())
5042 const clang::ComplexType *complex_type =
5043 qual_type->getAsComplexIntegerType();
5052 case clang::Type::ObjCInterface:
5054 case clang::Type::Record:
5056 case clang::Type::Enum:
5057 return qual_type->isUnsignedIntegerOrEnumerationType()
5060 case clang::Type::DependentSizedArray:
5061 case clang::Type::DependentSizedExtVector:
5062 case clang::Type::UnresolvedUsing:
5063 case clang::Type::Attributed:
5064 case clang::Type::BTFTagAttributed:
5065 case clang::Type::TemplateTypeParm:
5066 case clang::Type::SubstTemplateTypeParm:
5067 case clang::Type::SubstTemplateTypeParmPack:
5068 case clang::Type::InjectedClassName:
5069 case clang::Type::DependentName:
5070 case clang::Type::PackExpansion:
5071 case clang::Type::ObjCObject:
5073 case clang::Type::TemplateSpecialization:
5074 case clang::Type::DeducedTemplateSpecialization:
5075 case clang::Type::Adjusted:
5076 case clang::Type::Pipe:
5080 case clang::Type::Decayed:
5082 case clang::Type::ObjCTypeParam:
5085 case clang::Type::DependentAddressSpace:
5087 case clang::Type::MacroQualified:
5090 case clang::Type::ConstantMatrix:
5091 case clang::Type::DependentSizedMatrix:
5095 case clang::Type::PackIndexing:
5098 case clang::Type::HLSLAttributedResource:
5100 case clang::Type::HLSLInlineSpirv:
5102 case clang::Type::SubstBuiltinTemplatePack:
6034 const clang::Type::TypeClass type_class = qual_type->getTypeClass();
6035 switch (type_class) {
6036 case clang::Type::Builtin:
6037 switch (llvm::cast<clang::BuiltinType>(qual_type)->getKind()) {
6038 case clang::BuiltinType::UnknownAny:
6039 case clang::BuiltinType::Void:
6040 case clang::BuiltinType::NullPtr:
6041 case clang::BuiltinType::OCLEvent:
6042 case clang::BuiltinType::OCLImage1dRO:
6043 case clang::BuiltinType::OCLImage1dWO:
6044 case clang::BuiltinType::OCLImage1dRW:
6045 case clang::BuiltinType::OCLImage1dArrayRO:
6046 case clang::BuiltinType::OCLImage1dArrayWO:
6047 case clang::BuiltinType::OCLImage1dArrayRW:
6048 case clang::BuiltinType::OCLImage1dBufferRO:
6049 case clang::BuiltinType::OCLImage1dBufferWO:
6050 case clang::BuiltinType::OCLImage1dBufferRW:
6051 case clang::BuiltinType::OCLImage2dRO:
6052 case clang::BuiltinType::OCLImage2dWO:
6053 case clang::BuiltinType::OCLImage2dRW:
6054 case clang::BuiltinType::OCLImage2dArrayRO:
6055 case clang::BuiltinType::OCLImage2dArrayWO:
6056 case clang::BuiltinType::OCLImage2dArrayRW:
6057 case clang::BuiltinType::OCLImage3dRO:
6058 case clang::BuiltinType::OCLImage3dWO:
6059 case clang::BuiltinType::OCLImage3dRW:
6060 case clang::BuiltinType::OCLSampler:
6061 case clang::BuiltinType::HLSLResource:
6063 case clang::BuiltinType::Bool:
6064 case clang::BuiltinType::Char_U:
6065 case clang::BuiltinType::UChar:
6066 case clang::BuiltinType::WChar_U:
6067 case clang::BuiltinType::Char16:
6068 case clang::BuiltinType::Char32:
6069 case clang::BuiltinType::UShort:
6070 case clang::BuiltinType::UInt:
6071 case clang::BuiltinType::ULong:
6072 case clang::BuiltinType::ULongLong:
6073 case clang::BuiltinType::UInt128:
6074 case clang::BuiltinType::Char_S:
6075 case clang::BuiltinType::SChar:
6076 case clang::BuiltinType::WChar_S:
6077 case clang::BuiltinType::Short:
6078 case clang::BuiltinType::Int:
6079 case clang::BuiltinType::Long:
6080 case clang::BuiltinType::LongLong:
6081 case clang::BuiltinType::Int128:
6082 case clang::BuiltinType::Float:
6083 case clang::BuiltinType::Double:
6084 case clang::BuiltinType::LongDouble:
6085 case clang::BuiltinType::Float128:
6086 case clang::BuiltinType::Dependent:
6087 case clang::BuiltinType::Overload:
6088 case clang::BuiltinType::ObjCId:
6089 case clang::BuiltinType::ObjCClass:
6090 case clang::BuiltinType::ObjCSel:
6091 case clang::BuiltinType::BoundMember:
6092 case clang::BuiltinType::Half:
6093 case clang::BuiltinType::ARCUnbridgedCast:
6094 case clang::BuiltinType::PseudoObject:
6095 case clang::BuiltinType::BuiltinFn:
6096 case clang::BuiltinType::ArraySection:
6103 case clang::Type::Complex:
6105 case clang::Type::Pointer:
6107 case clang::Type::BlockPointer:
6110 case clang::Type::LValueReference:
6112 case clang::Type::RValueReference:
6114 case clang::Type::MemberPointer:
6116 case clang::Type::ConstantArray:
6118 case clang::Type::IncompleteArray:
6120 case clang::Type::VariableArray:
6122 case clang::Type::DependentSizedArray:
6124 case clang::Type::DependentSizedExtVector:
6126 case clang::Type::Vector:
6128 case clang::Type::ExtVector:
6130 case clang::Type::FunctionProto:
6132 case clang::Type::FunctionNoProto:
6134 case clang::Type::UnresolvedUsing:
6136 case clang::Type::Record:
6138 case clang::Type::Enum:
6140 case clang::Type::TemplateTypeParm:
6142 case clang::Type::SubstTemplateTypeParm:
6144 case clang::Type::TemplateSpecialization:
6146 case clang::Type::InjectedClassName:
6148 case clang::Type::DependentName:
6150 case clang::Type::ObjCObject:
6152 case clang::Type::ObjCInterface:
6154 case clang::Type::ObjCObjectPointer:
6182 bool transparent_pointers,
bool omit_empty_base_classes,
6183 bool ignore_array_bounds, std::string &child_name,
6184 uint32_t &child_byte_size, int32_t &child_byte_offset,
6185 uint32_t &child_bitfield_bit_size, uint32_t &child_bitfield_bit_offset,
6186 bool &child_is_base_class,
bool &child_is_deref_of_parent,
6189 return llvm::createStringError(
"invalid type");
6191 auto get_exe_scope = [&exe_ctx]() {
6195 clang::QualType parent_qual_type(
6197 const clang::Type::TypeClass parent_type_class =
6198 parent_qual_type->getTypeClass();
6199 child_bitfield_bit_size = 0;
6200 child_bitfield_bit_offset = 0;
6201 child_is_base_class =
false;
6204 auto num_children_or_err =
6206 if (!num_children_or_err)
6207 return num_children_or_err.takeError();
6209 const bool idx_is_valid = idx < *num_children_or_err;
6211 switch (parent_type_class) {
6212 case clang::Type::Builtin:
6214 return llvm::createStringError(
"invalid index");
6216 switch (llvm::cast<clang::BuiltinType>(parent_qual_type)->getKind()) {
6217 case clang::BuiltinType::ObjCId:
6218 case clang::BuiltinType::ObjCClass:
6229 case clang::Type::Record: {
6231 return llvm::createStringError(
"invalid index");
6233 return llvm::createStringError(
"cannot complete type");
6235 const clang::RecordType *record_type =
6236 llvm::cast<clang::RecordType>(parent_qual_type.getTypePtr());
6237 const clang::RecordDecl *record_decl =
6238 record_type->getDecl()->getDefinitionOrSelf();
6239 const clang::ASTRecordLayout &record_layout =
6241 uint32_t child_idx = 0;
6243 const clang::CXXRecordDecl *cxx_record_decl =
6244 llvm::dyn_cast<clang::CXXRecordDecl>(record_decl);
6245 if (cxx_record_decl) {
6247 clang::CXXRecordDecl::base_class_const_iterator base_class,
6249 for (base_class = cxx_record_decl->bases_begin(),
6250 base_class_end = cxx_record_decl->bases_end();
6251 base_class != base_class_end; ++base_class) {
6252 const clang::CXXRecordDecl *base_class_decl =
nullptr;
6255 if (omit_empty_base_classes) {
6257 llvm::cast<clang::CXXRecordDecl>(
6258 base_class->getType()->getAs<clang::RecordType>()->getDecl())
6259 ->getDefinitionOrSelf();
6264 if (idx == child_idx) {
6265 if (base_class_decl ==
nullptr)
6266 base_class_decl = llvm::cast<clang::CXXRecordDecl>(
6267 base_class->getType()
6268 ->getAs<clang::RecordType>()
6270 ->getDefinitionOrSelf();
6272 if (base_class->isVirtual()) {
6273 bool handled =
false;
6275 clang::VTableContextBase *vtable_ctx =
6279 cxx_record_decl, base_class_decl,
6283 bit_offset = record_layout.getVBaseClassOffset(base_class_decl)
6287 bit_offset = record_layout.getBaseClassOffset(base_class_decl)
6292 child_byte_offset = bit_offset / 8;
6295 auto size_or_err = base_class_clang_type.
GetBitSize(get_exe_scope());
6297 return llvm::joinErrors(
6298 llvm::createStringError(
"no size info for base class"),
6299 size_or_err.takeError());
6301 uint64_t base_class_clang_type_bit_size = *size_or_err;
6304 assert(base_class_clang_type_bit_size % 8 == 0);
6305 child_byte_size = base_class_clang_type_bit_size / 8;
6306 child_is_base_class =
true;
6307 return base_class_clang_type;
6315 uint32_t field_idx = 0;
6316 clang::RecordDecl::field_iterator field, field_end;
6317 for (field = record_decl->field_begin(),
6318 field_end = record_decl->field_end();
6319 field != field_end; ++field, ++field_idx, ++child_idx) {
6320 if (idx == child_idx) {
6323 child_name.assign(field->getNameAsString());
6328 assert(field_idx < record_layout.getFieldCount());
6329 auto size_or_err = field_clang_type.
GetByteSize(get_exe_scope());
6331 return llvm::joinErrors(
6332 llvm::createStringError(
"no size info for field"),
6333 size_or_err.takeError());
6335 child_byte_size = *size_or_err;
6336 const uint32_t child_bit_size = child_byte_size * 8;
6340 bit_offset = record_layout.getFieldOffset(field_idx);
6342 child_bitfield_bit_offset = bit_offset % child_bit_size;
6343 const uint32_t child_bit_offset =
6344 bit_offset - child_bitfield_bit_offset;
6345 child_byte_offset = child_bit_offset / 8;
6347 child_byte_offset = bit_offset / 8;
6350 return field_clang_type;
6354 case clang::Type::ObjCObject:
6355 case clang::Type::ObjCInterface: {
6357 return llvm::createStringError(
"invalid index");
6359 return llvm::createStringError(
"cannot complete type");
6361 const clang::ObjCObjectType *objc_class_type =
6362 llvm::dyn_cast<clang::ObjCObjectType>(parent_qual_type.getTypePtr());
6363 assert(objc_class_type);
6364 if (!objc_class_type)
6365 return llvm::createStringError(
"unexpected object type");
6367 uint32_t child_idx = 0;
6368 clang::ObjCInterfaceDecl *class_interface_decl =
6369 objc_class_type->getInterface();
6371 if (!class_interface_decl)
6372 return llvm::createStringError(
"cannot get interface decl");
6374 const clang::ASTRecordLayout &interface_layout =
6375 getASTContext().getASTObjCInterfaceLayout(class_interface_decl);
6376 clang::ObjCInterfaceDecl *superclass_interface_decl =
6377 class_interface_decl->getSuperClass();
6378 if (superclass_interface_decl) {
6379 if (omit_empty_base_classes) {
6381 getASTContext().getObjCInterfaceType(superclass_interface_decl));
6382 if (llvm::expectedToOptional(base_class_clang_type.
GetNumChildren(
6383 omit_empty_base_classes, exe_ctx))
6386 clang::QualType ivar_qual_type(
getASTContext().getObjCInterfaceType(
6387 superclass_interface_decl));
6389 child_name.assign(superclass_interface_decl->getNameAsString());
6391 clang::TypeInfo ivar_type_info =
6394 child_byte_size = ivar_type_info.Width / 8;
6395 child_byte_offset = 0;
6396 child_is_base_class =
true;
6398 return GetType(ivar_qual_type);
6407 const uint32_t superclass_idx = child_idx;
6409 if (idx < (child_idx + class_interface_decl->ivar_size())) {
6410 clang::ObjCInterfaceDecl::ivar_iterator ivar_pos,
6411 ivar_end = class_interface_decl->ivar_end();
6413 for (ivar_pos = class_interface_decl->ivar_begin(); ivar_pos != ivar_end;
6415 if (child_idx == idx) {
6416 clang::ObjCIvarDecl *ivar_decl = *ivar_pos;
6418 clang::QualType ivar_qual_type(ivar_decl->getType());
6420 child_name.assign(ivar_decl->getNameAsString());
6422 clang::TypeInfo ivar_type_info =
6425 child_byte_size = ivar_type_info.Width / 8;
6441 if (objc_runtime !=
nullptr) {
6444 parent_ast_type, ivar_decl->getNameAsString().c_str());
6452 if (child_byte_offset ==
6455 interface_layout.getFieldOffset(child_idx - superclass_idx);
6456 child_byte_offset = bit_offset / 8;
6468 interface_layout.getFieldOffset(child_idx - superclass_idx);
6470 child_bitfield_bit_offset = bit_offset % 8;
6472 return GetType(ivar_qual_type);
6479 case clang::Type::ObjCObjectPointer: {
6481 return llvm::createStringError(
"invalid index");
6485 child_is_deref_of_parent =
false;
6486 bool tmp_child_is_deref_of_parent =
false;
6488 exe_ctx, idx, transparent_pointers, omit_empty_base_classes,
6489 ignore_array_bounds, child_name, child_byte_size, child_byte_offset,
6490 child_bitfield_bit_size, child_bitfield_bit_offset,
6491 child_is_base_class, tmp_child_is_deref_of_parent, valobj,
6494 child_is_deref_of_parent =
true;
6495 const char *parent_name =
6498 child_name.assign(1,
'*');
6499 child_name += parent_name;
6504 auto size_or_err = pointee_clang_type.
GetByteSize(get_exe_scope());
6506 return size_or_err.takeError();
6507 child_byte_size = *size_or_err;
6508 child_byte_offset = 0;
6509 return pointee_clang_type;
6514 case clang::Type::Vector:
6515 case clang::Type::ExtVector: {
6517 return llvm::createStringError(
"invalid index");
6518 const clang::VectorType *array =
6519 llvm::cast<clang::VectorType>(parent_qual_type.getTypePtr());
6521 return llvm::createStringError(
"unexpected vector type");
6525 return llvm::createStringError(
"cannot complete type");
6527 char element_name[64];
6528 ::snprintf(element_name,
sizeof(element_name),
"[%" PRIu64
"]",
6529 static_cast<uint64_t
>(idx));
6530 child_name.assign(element_name);
6531 auto size_or_err = element_type.
GetByteSize(get_exe_scope());
6533 return size_or_err.takeError();
6534 child_byte_size = *size_or_err;
6535 child_byte_offset = (int32_t)idx * (int32_t)child_byte_size;
6536 return element_type;
6538 case clang::Type::ConstantArray:
6539 case clang::Type::IncompleteArray: {
6540 if (!ignore_array_bounds && !idx_is_valid)
6541 return llvm::createStringError(
"invalid index");
6542 const clang::ArrayType *array =
GetQualType(type)->getAsArrayTypeUnsafe();
6544 return llvm::createStringError(
"unexpected array type");
6547 return llvm::createStringError(
"cannot complete type");
6549 child_name = std::string(llvm::formatv(
"[{0}]", idx));
6550 auto size_or_err = element_type.
GetByteSize(get_exe_scope());
6552 return size_or_err.takeError();
6553 child_byte_size = *size_or_err;
6554 child_byte_offset = (int32_t)idx * (int32_t)child_byte_size;
6555 return element_type;
6557 case clang::Type::Pointer: {
6562 return llvm::createStringError(
"cannot dereference void *");
6565 child_is_deref_of_parent =
false;
6566 bool tmp_child_is_deref_of_parent =
false;
6568 exe_ctx, idx, transparent_pointers, omit_empty_base_classes,
6569 ignore_array_bounds, child_name, child_byte_size, child_byte_offset,
6570 child_bitfield_bit_size, child_bitfield_bit_offset,
6571 child_is_base_class, tmp_child_is_deref_of_parent, valobj,
6574 child_is_deref_of_parent =
true;
6578 child_name.assign(1,
'*');
6579 child_name += parent_name;
6584 auto size_or_err = pointee_clang_type.
GetByteSize(get_exe_scope());
6586 return size_or_err.takeError();
6587 child_byte_size = *size_or_err;
6588 child_byte_offset = 0;
6589 return pointee_clang_type;
6594 case clang::Type::LValueReference:
6595 case clang::Type::RValueReference: {
6597 return llvm::createStringError(
"invalid index");
6598 const clang::ReferenceType *reference_type =
6599 llvm::cast<clang::ReferenceType>(
6603 child_is_deref_of_parent =
false;
6604 bool tmp_child_is_deref_of_parent =
false;
6606 exe_ctx, idx, transparent_pointers, omit_empty_base_classes,
6607 ignore_array_bounds, child_name, child_byte_size, child_byte_offset,
6608 child_bitfield_bit_size, child_bitfield_bit_offset,
6609 child_is_base_class, tmp_child_is_deref_of_parent, valobj,
6614 child_name.assign(1,
'&');
6615 child_name += parent_name;
6620 auto size_or_err = pointee_clang_type.
GetByteSize(get_exe_scope());
6622 return size_or_err.takeError();
6623 child_byte_size = *size_or_err;
6624 child_byte_offset = 0;
6625 return pointee_clang_type;
6632 return llvm::createStringError(
"cannot enumerate children");
6715 bool omit_empty_base_classes, std::vector<uint32_t> &child_indexes) {
6716 if (type && !name.empty()) {
6718 const clang::Type::TypeClass type_class = qual_type->getTypeClass();
6719 switch (type_class) {
6720 case clang::Type::Record:
6722 const clang::RecordType *record_type =
6723 llvm::cast<clang::RecordType>(qual_type.getTypePtr());
6724 const clang::RecordDecl *record_decl =
6725 record_type->getDecl()->getDefinitionOrSelf();
6727 assert(record_decl);
6728 uint32_t child_idx = 0;
6730 const clang::CXXRecordDecl *cxx_record_decl =
6731 llvm::dyn_cast<clang::CXXRecordDecl>(record_decl);
6734 clang::RecordDecl::field_iterator field, field_end;
6735 for (field = record_decl->field_begin(),
6736 field_end = record_decl->field_end();
6737 field != field_end; ++field, ++child_idx) {
6738 llvm::StringRef field_name = field->getName();
6739 if (field_name.empty()) {
6741 std::vector<uint32_t> save_indices = child_indexes;
6742 child_indexes.push_back(
6744 cxx_record_decl, omit_empty_base_classes));
6746 name, omit_empty_base_classes, child_indexes))
6747 return child_indexes.size();
6748 child_indexes = std::move(save_indices);
6749 }
else if (field_name == name) {
6751 child_indexes.push_back(
6753 cxx_record_decl, omit_empty_base_classes));
6754 return child_indexes.size();
6758 if (cxx_record_decl) {
6759 const clang::RecordDecl *parent_record_decl = cxx_record_decl;
6762 clang::IdentifierInfo &ident_ref =
getASTContext().Idents.get(name);
6763 clang::DeclarationName decl_name(&ident_ref);
6765 clang::CXXBasePaths paths;
6766 if (cxx_record_decl->lookupInBases(
6767 [decl_name](
const clang::CXXBaseSpecifier *specifier,
6768 clang::CXXBasePath &path) {
6769 CXXRecordDecl *record =
6770 specifier->getType()->getAsCXXRecordDecl();
6771 auto r = record->lookup(decl_name);
6772 path.Decls = r.begin();
6776 clang::CXXBasePaths::const_paths_iterator path,
6777 path_end = paths.end();
6778 for (path = paths.begin(); path != path_end; ++path) {
6779 const size_t num_path_elements = path->size();
6780 for (
size_t e = 0; e < num_path_elements; ++e) {
6781 clang::CXXBasePathElement elem = (*path)[e];
6784 omit_empty_base_classes);
6786 child_indexes.clear();
6789 child_indexes.push_back(child_idx);
6790 parent_record_decl = elem.Base->getType()
6791 ->castAs<clang::RecordType>()
6793 ->getDefinitionOrSelf();
6796 for (clang::DeclContext::lookup_iterator I = path->Decls, E;
6799 parent_record_decl, *I, omit_empty_base_classes);
6801 child_indexes.clear();
6804 child_indexes.push_back(child_idx);
6808 return child_indexes.size();
6814 case clang::Type::ObjCObject:
6815 case clang::Type::ObjCInterface:
6817 llvm::StringRef name_sref(name);
6818 const clang::ObjCObjectType *objc_class_type =
6819 llvm::dyn_cast<clang::ObjCObjectType>(qual_type.getTypePtr());
6820 assert(objc_class_type);
6821 if (objc_class_type) {
6822 uint32_t child_idx = 0;
6823 clang::ObjCInterfaceDecl *class_interface_decl =
6824 objc_class_type->getInterface();
6826 if (class_interface_decl) {
6827 clang::ObjCInterfaceDecl::ivar_iterator ivar_pos,
6828 ivar_end = class_interface_decl->ivar_end();
6829 clang::ObjCInterfaceDecl *superclass_interface_decl =
6830 class_interface_decl->getSuperClass();
6832 for (ivar_pos = class_interface_decl->ivar_begin();
6833 ivar_pos != ivar_end; ++ivar_pos, ++child_idx) {
6834 const clang::ObjCIvarDecl *ivar_decl = *ivar_pos;
6836 if (ivar_decl->getName() == name_sref) {
6837 if ((!omit_empty_base_classes && superclass_interface_decl) ||
6838 (omit_empty_base_classes &&
6842 child_indexes.push_back(child_idx);
6843 return child_indexes.size();
6847 if (superclass_interface_decl) {
6851 child_indexes.push_back(0);
6855 superclass_interface_decl));
6857 name, omit_empty_base_classes, child_indexes)) {
6860 return child_indexes.size();
6865 child_indexes.pop_back();
6872 case clang::Type::ObjCObjectPointer: {
6874 llvm::cast<clang::ObjCObjectPointerType>(qual_type.getTypePtr())
6875 ->getPointeeType());
6877 name, omit_empty_base_classes, child_indexes);
6880 case clang::Type::LValueReference:
6881 case clang::Type::RValueReference: {
6882 const clang::ReferenceType *reference_type =
6883 llvm::cast<clang::ReferenceType>(qual_type.getTypePtr());
6884 clang::QualType pointee_type(reference_type->getPointeeType());
6889 name, omit_empty_base_classes, child_indexes);
6893 case clang::Type::Pointer: {
6898 name, omit_empty_base_classes, child_indexes);
7668 llvm::StringRef asm_label,
const CompilerType &method_clang_type,
7669 bool is_virtual,
bool is_static,
bool is_inline,
bool is_explicit,
7670 bool is_attr_used,
bool is_artificial) {
7671 if (!type || !method_clang_type.
IsValid() || name.empty())
7676 clang::CXXRecordDecl *cxx_record_decl =
7677 record_qual_type->getAsCXXRecordDecl();
7679 if (cxx_record_decl ==
nullptr)
7684 clang::CXXMethodDecl *cxx_method_decl =
nullptr;
7686 clang::DeclarationName decl_name(&
getASTContext().Idents.get(name));
7688 const clang::FunctionType *function_type =
7689 llvm::dyn_cast<clang::FunctionType>(method_qual_type.getTypePtr());
7691 if (function_type ==
nullptr)
7694 const clang::FunctionProtoType *method_function_prototype(
7695 llvm::dyn_cast<clang::FunctionProtoType>(function_type));
7697 if (!method_function_prototype)
7700 unsigned int num_params = method_function_prototype->getNumParams();
7702 clang::CXXDestructorDecl *cxx_dtor_decl(
nullptr);
7703 clang::CXXConstructorDecl *cxx_ctor_decl(
nullptr);
7708 const clang::ExplicitSpecifier explicit_spec(
7709 nullptr , is_explicit ? clang::ExplicitSpecKind::ResolvedTrue
7710 : clang::ExplicitSpecKind::ResolvedFalse);
7712 if (name.starts_with(
"~")) {
7713 cxx_dtor_decl = clang::CXXDestructorDecl::CreateDeserialized(
7715 cxx_dtor_decl->setDeclContext(cxx_record_decl);
7716 cxx_dtor_decl->setDeclName(
7719 cxx_dtor_decl->setType(method_qual_type);
7720 cxx_dtor_decl->setImplicit(is_artificial);
7721 cxx_dtor_decl->setInlineSpecified(is_inline);
7722 cxx_dtor_decl->setConstexprKind(ConstexprSpecKind::Unspecified);
7723 cxx_method_decl = cxx_dtor_decl;
7724 }
else if (decl_name == cxx_record_decl->getDeclName()) {
7725 cxx_ctor_decl = clang::CXXConstructorDecl::CreateDeserialized(
7727 cxx_ctor_decl->setDeclContext(cxx_record_decl);
7728 cxx_ctor_decl->setDeclName(
7731 cxx_ctor_decl->setType(method_qual_type);
7732 cxx_ctor_decl->setImplicit(is_artificial);
7733 cxx_ctor_decl->setInlineSpecified(is_inline);
7734 cxx_ctor_decl->setConstexprKind(ConstexprSpecKind::Unspecified);
7735 cxx_ctor_decl->setNumCtorInitializers(0);
7736 cxx_ctor_decl->setExplicitSpecifier(explicit_spec);
7737 cxx_method_decl = cxx_ctor_decl;
7739 clang::StorageClass SC = is_static ? clang::SC_Static : clang::SC_None;
7740 clang::OverloadedOperatorKind op_kind = clang::NUM_OVERLOADED_OPERATORS;
7743 if (op_kind != clang::NUM_OVERLOADED_OPERATORS) {
7748 const bool is_method =
true;
7750 is_method, op_kind, num_params))
7752 cxx_method_decl = clang::CXXMethodDecl::CreateDeserialized(
7754 cxx_method_decl->setDeclContext(cxx_record_decl);
7755 cxx_method_decl->setDeclName(
7756 getASTContext().DeclarationNames.getCXXOperatorName(op_kind));
7757 cxx_method_decl->setType(method_qual_type);
7758 cxx_method_decl->setStorageClass(SC);
7759 cxx_method_decl->setInlineSpecified(is_inline);
7760 cxx_method_decl->setConstexprKind(ConstexprSpecKind::Unspecified);
7761 }
else if (num_params == 0) {
7763 auto *cxx_conversion_decl =
7764 clang::CXXConversionDecl::CreateDeserialized(
getASTContext(),
7766 cxx_conversion_decl->setDeclContext(cxx_record_decl);
7767 cxx_conversion_decl->setDeclName(
7768 getASTContext().DeclarationNames.getCXXConversionFunctionName(
7770 function_type->getReturnType())));
7771 cxx_conversion_decl->setType(method_qual_type);
7772 cxx_conversion_decl->setInlineSpecified(is_inline);
7773 cxx_conversion_decl->setExplicitSpecifier(explicit_spec);
7774 cxx_conversion_decl->setConstexprKind(ConstexprSpecKind::Unspecified);
7775 cxx_method_decl = cxx_conversion_decl;
7779 if (cxx_method_decl ==
nullptr) {
7780 cxx_method_decl = clang::CXXMethodDecl::CreateDeserialized(
7782 cxx_method_decl->setDeclContext(cxx_record_decl);
7783 cxx_method_decl->setDeclName(decl_name);
7784 cxx_method_decl->setType(method_qual_type);
7785 cxx_method_decl->setInlineSpecified(is_inline);
7786 cxx_method_decl->setStorageClass(SC);
7787 cxx_method_decl->setConstexprKind(ConstexprSpecKind::Unspecified);
7792 cxx_method_decl->setAccess(AS_public);
7793 cxx_method_decl->setVirtualAsWritten(is_virtual);
7796 cxx_method_decl->addAttr(clang::UsedAttr::CreateImplicit(
getASTContext()));
7798 if (!asm_label.empty())
7799 cxx_method_decl->addAttr(
7800 clang::AsmLabelAttr::CreateImplicit(
getASTContext(), asm_label));
7805 cxx_method_decl, *method_function_prototype, {}));
7807 cxx_record_decl->addDecl(cxx_method_decl);
7816 if (is_artificial) {
7817 if (cxx_ctor_decl && ((cxx_ctor_decl->isDefaultConstructor() &&
7818 cxx_record_decl->hasTrivialDefaultConstructor()) ||
7819 (cxx_ctor_decl->isCopyConstructor() &&
7820 cxx_record_decl->hasTrivialCopyConstructor()) ||
7821 (cxx_ctor_decl->isMoveConstructor() &&
7822 cxx_record_decl->hasTrivialMoveConstructor()))) {
7823 cxx_ctor_decl->setDefaulted();
7824 cxx_ctor_decl->setTrivial(
true);
7825 }
else if (cxx_dtor_decl) {
7826 if (cxx_record_decl->hasTrivialDestructor()) {
7827 cxx_dtor_decl->setDefaulted();
7828 cxx_dtor_decl->setTrivial(
true);
7830 }
else if ((cxx_method_decl->isCopyAssignmentOperator() &&
7831 cxx_record_decl->hasTrivialCopyAssignment()) ||
7832 (cxx_method_decl->isMoveAssignmentOperator() &&
7833 cxx_record_decl->hasTrivialMoveAssignment())) {
7834 cxx_method_decl->setDefaulted();
7835 cxx_method_decl->setTrivial(
true);
7839 VerifyDecl(cxx_method_decl);
7841 return cxx_method_decl;
7910 const CompilerType &property_clang_type, clang::ObjCIvarDecl *ivar_decl,
7911 const char *property_setter_name,
const char *property_getter_name,
7913 if (!type || !property_clang_type.
IsValid() || property_name ==
nullptr ||
7914 property_name[0] ==
'\0')
7919 clang::ASTContext &clang_ast = ast->getASTContext();
7922 if (!class_interface_decl)
7927 if (property_clang_type.
IsValid())
7928 property_clang_type_to_access = property_clang_type;
7930 property_clang_type_to_access = ast->GetType(ivar_decl->getType());
7932 if (!class_interface_decl || !property_clang_type_to_access.
IsValid())
7935 clang::TypeSourceInfo *prop_type_source;
7937 prop_type_source = clang_ast.getTrivialTypeSourceInfo(ivar_decl->getType());
7939 prop_type_source = clang_ast.getTrivialTypeSourceInfo(
7942 clang::ObjCPropertyDecl *property_decl =
7943 clang::ObjCPropertyDecl::CreateDeserialized(clang_ast, GlobalDeclID());
7944 property_decl->setDeclContext(class_interface_decl);
7945 property_decl->setDeclName(&clang_ast.Idents.get(property_name));
7946 property_decl->setType(ivar_decl
7947 ? ivar_decl->getType()
7955 ast->SetMetadata(property_decl, metadata);
7957 class_interface_decl->addDecl(property_decl);
7959 clang::Selector setter_sel, getter_sel;
7961 if (property_setter_name) {
7962 std::string property_setter_no_colon(property_setter_name,
7963 strlen(property_setter_name) - 1);
7964 const clang::IdentifierInfo *setter_ident =
7965 &clang_ast.Idents.get(property_setter_no_colon);
7966 setter_sel = clang_ast.Selectors.getSelector(1, &setter_ident);
7967 }
else if (!(property_attributes & DW_APPLE_PROPERTY_readonly)) {
7968 std::string setter_sel_string(
"set");
7969 setter_sel_string.push_back(::toupper(property_name[0]));
7970 setter_sel_string.append(&property_name[1]);
7971 const clang::IdentifierInfo *setter_ident =
7972 &clang_ast.Idents.get(setter_sel_string);
7973 setter_sel = clang_ast.Selectors.getSelector(1, &setter_ident);
7975 property_decl->setSetterName(setter_sel);
7976 property_decl->setPropertyAttributes(ObjCPropertyAttribute::kind_setter);
7978 if (property_getter_name !=
nullptr) {
7979 const clang::IdentifierInfo *getter_ident =
7980 &clang_ast.Idents.get(property_getter_name);
7981 getter_sel = clang_ast.Selectors.getSelector(0, &getter_ident);
7983 const clang::IdentifierInfo *getter_ident =
7984 &clang_ast.Idents.get(property_name);
7985 getter_sel = clang_ast.Selectors.getSelector(0, &getter_ident);
7987 property_decl->setGetterName(getter_sel);
7988 property_decl->setPropertyAttributes(ObjCPropertyAttribute::kind_getter);
7991 property_decl->setPropertyIvarDecl(ivar_decl);
7993 if (property_attributes & DW_APPLE_PROPERTY_readonly)
7994 property_decl->setPropertyAttributes(ObjCPropertyAttribute::kind_readonly);
7995 if (property_attributes & DW_APPLE_PROPERTY_readwrite)
7996 property_decl->setPropertyAttributes(ObjCPropertyAttribute::kind_readwrite);
7997 if (property_attributes & DW_APPLE_PROPERTY_assign)
7998 property_decl->setPropertyAttributes(ObjCPropertyAttribute::kind_assign);
7999 if (property_attributes & DW_APPLE_PROPERTY_retain)
8000 property_decl->setPropertyAttributes(ObjCPropertyAttribute::kind_retain);
8001 if (property_attributes & DW_APPLE_PROPERTY_copy)
8002 property_decl->setPropertyAttributes(ObjCPropertyAttribute::kind_copy);
8003 if (property_attributes & DW_APPLE_PROPERTY_nonatomic)
8004 property_decl->setPropertyAttributes(ObjCPropertyAttribute::kind_nonatomic);
8005 if (property_attributes & ObjCPropertyAttribute::kind_nullability)
8006 property_decl->setPropertyAttributes(
8007 ObjCPropertyAttribute::kind_nullability);
8008 if (property_attributes & ObjCPropertyAttribute::kind_null_resettable)
8009 property_decl->setPropertyAttributes(
8010 ObjCPropertyAttribute::kind_null_resettable);
8011 if (property_attributes & ObjCPropertyAttribute::kind_class)
8012 property_decl->setPropertyAttributes(ObjCPropertyAttribute::kind_class);
8014 const bool isInstance =
8015 (property_attributes & ObjCPropertyAttribute::kind_class) == 0;
8017 clang::ObjCMethodDecl *getter =
nullptr;
8018 if (!getter_sel.isNull())
8019 getter = isInstance ? class_interface_decl->lookupInstanceMethod(getter_sel)
8020 : class_interface_decl->lookupClassMethod(getter_sel);
8021 if (!getter_sel.isNull() && !getter) {
8022 const bool isVariadic =
false;
8023 const bool isPropertyAccessor =
true;
8024 const bool isSynthesizedAccessorStub =
false;
8025 const bool isImplicitlyDeclared =
true;
8026 const bool isDefined =
false;
8027 const clang::ObjCImplementationControl impControl =
8028 clang::ObjCImplementationControl::None;
8029 const bool HasRelatedResultType =
false;
8032 clang::ObjCMethodDecl::CreateDeserialized(clang_ast, GlobalDeclID());
8033 getter->setDeclName(getter_sel);
8035 getter->setDeclContext(class_interface_decl);
8036 getter->setInstanceMethod(isInstance);
8037 getter->setVariadic(isVariadic);
8038 getter->setPropertyAccessor(isPropertyAccessor);
8039 getter->setSynthesizedAccessorStub(isSynthesizedAccessorStub);
8040 getter->setImplicit(isImplicitlyDeclared);
8041 getter->setDefined(isDefined);
8042 getter->setDeclImplementation(impControl);
8043 getter->setRelatedResultType(HasRelatedResultType);
8047 ast->SetMetadata(getter, metadata);
8049 getter->setMethodParams(clang_ast, llvm::ArrayRef<clang::ParmVarDecl *>(),
8050 llvm::ArrayRef<clang::SourceLocation>());
8051 class_interface_decl->addDecl(getter);
8055 getter->setPropertyAccessor(
true);
8056 property_decl->setGetterMethodDecl(getter);
8059 clang::ObjCMethodDecl *setter =
nullptr;
8060 setter = isInstance ? class_interface_decl->lookupInstanceMethod(setter_sel)
8061 : class_interface_decl->lookupClassMethod(setter_sel);
8062 if (!setter_sel.isNull() && !setter) {
8063 clang::QualType result_type = clang_ast.VoidTy;
8064 const bool isVariadic =
false;
8065 const bool isPropertyAccessor =
true;
8066 const bool isSynthesizedAccessorStub =
false;
8067 const bool isImplicitlyDeclared =
true;
8068 const bool isDefined =
false;
8069 const clang::ObjCImplementationControl impControl =
8070 clang::ObjCImplementationControl::None;
8071 const bool HasRelatedResultType =
false;
8074 clang::ObjCMethodDecl::CreateDeserialized(clang_ast, GlobalDeclID());
8075 setter->setDeclName(setter_sel);
8076 setter->setReturnType(result_type);
8077 setter->setDeclContext(class_interface_decl);
8078 setter->setInstanceMethod(isInstance);
8079 setter->setVariadic(isVariadic);
8080 setter->setPropertyAccessor(isPropertyAccessor);
8081 setter->setSynthesizedAccessorStub(isSynthesizedAccessorStub);
8082 setter->setImplicit(isImplicitlyDeclared);
8083 setter->setDefined(isDefined);
8084 setter->setDeclImplementation(impControl);
8085 setter->setRelatedResultType(HasRelatedResultType);
8089 ast->SetMetadata(setter, metadata);
8091 llvm::SmallVector<clang::ParmVarDecl *, 1> params;
8092 params.push_back(clang::ParmVarDecl::Create(
8093 clang_ast, setter, clang::SourceLocation(), clang::SourceLocation(),
8096 clang::SC_Auto,
nullptr));
8098 setter->setMethodParams(clang_ast,
8099 llvm::ArrayRef<clang::ParmVarDecl *>(params),
8100 llvm::ArrayRef<clang::SourceLocation>());
8102 class_interface_decl->addDecl(setter);
8106 setter->setPropertyAccessor(
true);
8107 property_decl->setSetterMethodDecl(setter);
static void ReportWarning(std::string message, std::optional< lldb::user_id_t > debugger_id=std::nullopt, std::once_flag *>
Report warning events.
A class that describes the declaration location of a lldb object.
"lldb/Target/ExecutionContextScope.h" Inherit from this if your object can reconstruct its execution ...
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
ExecutionContextScope * GetBestExecutionContextScope() const
Process * GetProcessPtr() const
Returns a pointer to the process object.
static FileSystem & Instance()
bool Test(ValueType bit) const
Test a single flag bit.
bool AnySet(ValueType mask) const
Test one or more flags.
Encapsulates a function that can be called.
static bool LanguageIsC(lldb::LanguageType language)
static bool LanguageIsCPlusPlus(lldb::LanguageType language)
static bool LanguageIsPascal(lldb::LanguageType language)
static bool LanguageIsObjC(lldb::LanguageType language)
static bool IsMangledName(llvm::StringRef name)
A class that describes an executable image and its associated object and symbol files.
virtual size_t GetByteOffsetForIvar(CompilerType &parent_qual_type, const char *ivar_name)
static ObjCLanguageRuntime * Get(Process &process)
unsigned GetValue() const
static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description, ABICreateInstance create_callback)
static bool UnregisterPlugin(ABICreateInstance create_callback)
A plug-in interface definition class for debugging a process.
int64_t ReadSignedIntegerFromMemory(lldb::addr_t load_addr, size_t byte_size, int64_t fail_value, Status &error)
lldb::addr_t ReadPointerFromMemory(lldb::addr_t vm_addr, Status &error)
uint32_t GetAddressByteSize() const
void Finalize() override
Free up any resources associated with this TypeSystem.
static lldb::TypeSystemClangSP GetForTarget(Target &target, std::optional< IsolatedASTKind > ast_kind=DefaultAST, bool create_on_demand=true)
Returns the scratch TypeSystemClang for the given target.
llvm::Triple m_triple
The target triple.
std::unique_ptr< ClangASTSource > CreateASTSource()
lldb::TargetWP m_target_wp
TypeSystemClang & GetIsolatedAST(IsolatedASTKind feature)
Returns the requested sub-AST.
UserExpression * GetUserExpression(llvm::StringRef expr, llvm::StringRef prefix, SourceLanguage language, Expression::ResultType desired_type, const EvaluateExpressionOptions &options, ValueObject *ctx_obj) override
std::unique_ptr< ClangASTSource > m_scratch_ast_source_up
The ExternalASTSource that performs lookups and completes minimally imported types.
IsolatedASTKind
The different kinds of isolated ASTs within the scratch TypeSystem.
@ CppModules
The isolated AST for declarations/types from expressions that imported type information from a C++ mo...
void Dump(llvm::raw_ostream &output, llvm::StringRef filter, bool show_color) override
std::unique_ptr< ClangPersistentVariables > m_persistent_variables
The persistent variables associated with this process for the expression parser.
static char ID
LLVM RTTI support.
PersistentExpressionState * GetPersistentExpressionState() override
FunctionCaller * GetFunctionCaller(const CompilerType &return_type, const Address &function_address, const ValueList &arg_value_list, const char *name) override
std::unique_ptr< UtilityFunction > CreateUtilityFunction(std::string text, std::string name) override
void ForgetSource(clang::ASTContext *src_ctx, ClangASTImporter &importer)
Unregisters the given ASTContext as a source from the scratch AST (and all sub-ASTs).
static const std::nullopt_t DefaultAST
Alias for requesting the default scratch TypeSystemClang in GetForTarget.
ScratchTypeSystemClang(Target &target, llvm::Triple triple)
llvm::DenseMap< IsolatedASTKey, std::shared_ptr< TypeSystemClang > > m_isolated_asts
Map from IsolatedASTKind to their actual TypeSystemClang instance.
bool Fail() const
Test for error condition.
llvm::StringRef GetString() const
A stream class that can stream formatted output to a file.
size_t Write(const void *src, size_t src_len)
Output character bytes to the stream.
llvm::raw_ostream & AsRawOstream()
Returns a raw_ostream that forwards the data to this Stream object.
size_t Printf(const char *format,...) __attribute__((format(printf
Output printf formatted output to the stream.
size_t PutCString(llvm::StringRef cstr)
Output a C string to the stream.
unsigned GetIndentLevel() const
Get the current indentation level.
Provides public interface for all SymbolFiles.
virtual void ParseDeclsForContext(CompilerDeclContext decl_ctx)
virtual bool CompleteType(CompilerType &compiler_type)=0
virtual void GetTypes(lldb_private::SymbolContextScope *sc_scope, lldb::TypeClass type_mask, lldb_private::TypeList &type_list)=0
virtual std::optional< ArrayInfo > GetDynamicArrayInfoForUID(lldb::user_id_t type_uid, const lldb_private::ExecutionContext *exe_ctx)=0
If type_uid points to an array type, return its characteristics.
llvm::Expected< lldb::TypeSystemSP > GetScratchTypeSystemForLanguage(lldb::LanguageType language, bool create_on_demand=true)
const ArchSpec & GetArchitecture() const
void Insert(_KeyType k, _ValueType v)
_ValueType Lookup(_KeyType k)
lldb::TypeSP GetTypeAtIndex(uint32_t idx) const
The implementation of lldb::Type's m_payload field for TypeSystemClang.
void SetIsCompleteObjCClass(bool is_complete_objc_class)
bool IsCompleteObjCClass()
Type::Payload m_payload
The payload is used for typedefs and ptrauth types.
TypePayloadClang()=default
void SetOwningModule(OptionalClangModuleID id)
static constexpr unsigned ObjCClassBit
llvm::ArrayRef< clang::TemplateArgument > GetParameterPackArgs() const
void SetParameterPack(std::unique_ptr< TemplateParameterInfos > args)
clang::TemplateArgument const & Front() const
llvm::StringRef GetPackName() const
bool hasParameterPack() const
TemplateParameterInfos const & GetParameterPack() const
llvm::ArrayRef< const char * > GetNames() const
llvm::ArrayRef< clang::TemplateArgument > GetArgs() const
A TypeSystem implementation based on Clang.
bool IsMemberFunctionPointerType(lldb::opaque_compiler_type_t type) override
clang::ClassTemplateDecl * CreateClassTemplateDecl(clang::DeclContext *decl_ctx, OptionalClangModuleID owning_module, llvm::StringRef class_name, int kind, const TemplateParameterInfos &infos)
clang::ClassTemplateDecl * ParseClassTemplateDecl(clang::DeclContext *decl_ctx, OptionalClangModuleID owning_module, const char *parent_name, int tag_decl_kind, const TypeSystemClang::TemplateParameterInfos &template_param_infos)
CompilerType GetTypeForIdentifier(const clang::ASTContext &Ctx, llvm::StringRef type_name, clang::DeclContext *decl_context=nullptr)
llvm::Expected< uint64_t > GetBitSize(lldb::opaque_compiler_type_t type, ExecutionContextScope *exe_scope) override
CompilerType CreateFunctionType(const CompilerType &result_type, llvm::ArrayRef< CompilerType > args, bool is_variadic, unsigned type_quals, clang::CallingConv cc=clang::CC_C, clang::RefQualifierKind ref_qual=clang::RQ_None)
size_t GetIndexOfChildMemberWithName(lldb::opaque_compiler_type_t type, llvm::StringRef name, bool omit_empty_base_classes, std::vector< uint32_t > &child_indexes) override
static clang::TypedefNameDecl * GetAsTypedefDecl(const CompilerType &type)
std::string GetTypeNameForDecl(const clang::NamedDecl *named_decl, bool qualified=true)
Returns the internal type name for the given NamedDecl using the type printing policy.
static clang::ObjCInterfaceDecl * GetAsObjCInterfaceDecl(const CompilerType &type)
uint32_t m_pointer_byte_size
bool DumpTypeValue(lldb::opaque_compiler_type_t type, Stream &s, lldb::Format format, const DataExtractor &data, lldb::offset_t data_offset, size_t data_byte_size, uint32_t bitfield_bit_size, uint32_t bitfield_bit_offset, ExecutionContextScope *exe_scope) override
std::string m_display_name
A string describing what this TypeSystemClang represents (e.g., AST for debug information,...
ConstString GetTypeName(lldb::opaque_compiler_type_t type, bool base_only) override
static void SetOwningModule(clang::Decl *decl, OptionalClangModuleID owning_module)
Set the owning module for decl.
llvm::Expected< uint64_t > GetObjCBitSize(clang::QualType qual_type, ExecutionContextScope *exe_scope)
std::unique_ptr< clang::TargetInfo > m_target_info_up
std::unique_ptr< clang::LangOptions > m_language_options_up
Scalar DeclGetConstantValue(void *opaque_decl) override
llvm::Expected< CompilerType > GetDereferencedType(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, std::string &deref_name, uint32_t &deref_byte_size, int32_t &deref_byte_offset, ValueObject *valobj, uint64_t &language_flags) override
bool BaseSpecifierIsEmpty(const clang::CXXBaseSpecifier *b)
static uint32_t GetNumPointeeChildren(clang::QualType type)
ConstString DeclGetMangledName(void *opaque_decl) override
CompilerType GetBasicType(lldb::BasicType type)
std::unique_ptr< clang::HeaderSearchOptions > m_header_search_opts_up
clang::UsingDecl * CreateUsingDeclaration(clang::DeclContext *current_decl_ctx, OptionalClangModuleID owning_module, clang::NamedDecl *target)
static clang::AccessSpecifier ConvertAccessTypeToAccessSpecifier(lldb::AccessType access)
CompilerType GetNonReferenceType(lldb::opaque_compiler_type_t type) override
bool IsForcefullyCompleted(lldb::opaque_compiler_type_t type) override
bool SupportsLanguage(lldb::LanguageType language) override
uint32_t GetNumDirectBaseClasses(lldb::opaque_compiler_type_t type) override
OptionalClangModuleID GetOrCreateClangModule(llvm::StringRef name, OptionalClangModuleID parent, bool is_framework=false, bool is_explicit=false)
Synthesize a clang::Module and return its ID or a default-constructed ID.
void CompleteTagDecl(clang::TagDecl *)
std::shared_ptr< clang::TargetOptions > & getTargetOptions()
static TypeSystemClang * GetASTContext(clang::ASTContext *ast_ctx)
bool IsReferenceType(lldb::opaque_compiler_type_t type, CompilerType *pointee_type, bool *is_rvalue) override
CompilerType GetBuiltinTypeForEncodingAndBitSize(lldb::Encoding encoding, size_t bit_size) override
const char * GetTargetTriple()
TypeSystemClang(llvm::StringRef name, llvm::Triple triple)
Constructs a TypeSystemClang with an ASTContext using the given triple.
static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language, Module *module, Target *target)
clang::TargetInfo * getTargetInfo()
clang::FunctionTemplateDecl * CreateFunctionTemplateDecl(clang::DeclContext *decl_ctx, OptionalClangModuleID owning_module, clang::FunctionDecl *func_decl, const TemplateParameterInfos &infos)
CompilerType CreateArrayType(const CompilerType &element_type, std::optional< size_t > element_count, bool is_vector)
static bool AreTypesSame(CompilerType type1, CompilerType type2, bool ignore_qualifiers=false)
CompilerType GetArrayType(lldb::opaque_compiler_type_t type, uint64_t size) override
bool IsFunctionType(lldb::opaque_compiler_type_t type) override
CompilerType GetFunctionReturnType(lldb::opaque_compiler_type_t type) override
std::optional< ClangASTMetadata > GetMetadata(const clang::Decl *object)
CompilerType GetLValueReferenceType(lldb::opaque_compiler_type_t type) override
bool SetDeclIsForcefullyCompleted(const clang::TagDecl *td)
lldb::Format GetFormat(lldb::opaque_compiler_type_t type) override
bool CanPassInRegisters(const CompilerType &type) override
CompilerDecl GetStaticFieldWithName(lldb::opaque_compiler_type_t type, llvm::StringRef name) override
static clang::DeclContext * GetDeclContextForType(clang::QualType type)
bool IsEnumerationType(lldb::opaque_compiler_type_t type, bool &is_signed) override
bool IsTemplateType(lldb::opaque_compiler_type_t type) override
CompilerType GetTypeTemplateArgument(lldb::opaque_compiler_type_t type, size_t idx, bool expand_pack) override
static bool IsCXXClassType(const CompilerType &type)
bool IsIntegerType(lldb::opaque_compiler_type_t type, bool &is_signed) override
std::unique_ptr< npdb::PdbAstBuilderClang > m_native_pdb_ast_parser_up
uint32_t GetNumFields(lldb::opaque_compiler_type_t type) override
static bool IsOperator(llvm::StringRef name, clang::OverloadedOperatorKind &op_kind)
bool IsCharType(lldb::opaque_compiler_type_t type) override
CompilerType CreateStructForIdentifier(llvm::StringRef type_name, const std::initializer_list< std::pair< const char *, CompilerType > > &type_fields, bool packed=false)
static void SetFloatingInitializerForVariable(clang::VarDecl *var, const llvm::APFloat &init_value)
Initializes a variable with a floating point value.
uint32_t GetTypeInfo(lldb::opaque_compiler_type_t type, CompilerType *pointee_or_element_compiler_type) override
llvm::Expected< CompilerType > GetChildCompilerTypeAtIndex(lldb::opaque_compiler_type_t type, ExecutionContext *exe_ctx, size_t idx, bool transparent_pointers, bool omit_empty_base_classes, bool ignore_array_bounds, std::string &child_name, uint32_t &child_byte_size, int32_t &child_byte_offset, uint32_t &child_bitfield_bit_size, uint32_t &child_bitfield_bit_offset, bool &child_is_base_class, bool &child_is_deref_of_parent, ValueObject *valobj, uint64_t &language_flags) override
CompilerType GetType(clang::QualType qt)
Creates a CompilerType from the given QualType with the current TypeSystemClang instance as the Compi...
static clang::TagDecl * GetAsTagDecl(const CompilerType &type)
ConstString GetDisplayTypeName(lldb::opaque_compiler_type_t type) override
std::string m_target_triple
bool TransferBaseClasses(lldb::opaque_compiler_type_t type, std::vector< std::unique_ptr< clang::CXXBaseSpecifier > > bases)
bool IsBeingDefined(lldb::opaque_compiler_type_t type) override
CompilerType GetPromotedIntegerType(lldb::opaque_compiler_type_t type) override
ConstString DeclContextGetScopeQualifiedName(void *opaque_decl_ctx) override
std::unique_ptr< clang::IdentifierTable > m_identifier_table_up
static lldb::BasicType GetBasicTypeEnumeration(llvm::StringRef name)
static void SetIntegerInitializerForVariable(clang::VarDecl *var, const llvm::APInt &init_value)
Initializes a variable with an integer value.
bool IsPolymorphicClass(lldb::opaque_compiler_type_t type) override
CompilerType GetFieldAtIndex(lldb::opaque_compiler_type_t type, size_t idx, std::string &name, uint64_t *bit_offset_ptr, uint32_t *bitfield_bit_size_ptr, bool *is_bitfield_ptr) override
bool LayoutRecordType(const clang::RecordDecl *record_decl, uint64_t &size, uint64_t &alignment, llvm::DenseMap< const clang::FieldDecl *, uint64_t > &field_offsets, llvm::DenseMap< const clang::CXXRecordDecl *, clang::CharUnits > &base_offsets, llvm::DenseMap< const clang::CXXRecordDecl *, clang::CharUnits > &vbase_offsets)
bool IsScopedEnumerationType(lldb::opaque_compiler_type_t type) override
std::unique_ptr< clang::SourceManager > m_source_manager_up
bool IsVoidType(lldb::opaque_compiler_type_t type) override
static void SetIsPacked(const CompilerType &type)
void ForEachEnumerator(lldb::opaque_compiler_type_t type, std::function< bool(const CompilerType &integer_type, ConstString name, const llvm::APSInt &value)> const &callback) override
CompilerType CreateClassTemplateSpecializationType(clang::ClassTemplateSpecializationDecl *class_template_specialization_decl)
bool IsPointerType(lldb::opaque_compiler_type_t type, CompilerType *pointee_type) override
std::unique_ptr< clang::DiagnosticOptions > m_diagnostic_options_up
void CreateFunctionTemplateSpecializationInfo(clang::FunctionDecl *func_decl, clang::FunctionTemplateDecl *Template, const TemplateParameterInfos &infos)
clang::EnumConstantDecl * AddEnumerationValueToEnumerationType(const CompilerType &enum_type, const Declaration &decl, const char *name, uint64_t enum_value, uint32_t enum_value_bit_size)
llvm::StringRef getDisplayName() const
Returns the display name of this TypeSystemClang that indicates what purpose it serves in LLDB.
static clang::VarDecl * AddVariableToRecordType(const CompilerType &type, llvm::StringRef name, const CompilerType &var_type)
bool IsCStringType(lldb::opaque_compiler_type_t type, uint32_t &length)
CompilerType GetRValueReferenceType(lldb::opaque_compiler_type_t type) override
CompilerDecl GetCompilerDecl(clang::Decl *decl)
Creates a CompilerDecl from the given Decl with the current TypeSystemClang instance as its typesyste...
unsigned GetPtrAuthDiscriminator(lldb::opaque_compiler_type_t type) override
CompilerType GetPointeeType(lldb::opaque_compiler_type_t type) override
bool GetCompleteType(lldb::opaque_compiler_type_t type) override
bool IsBlockPointerType(lldb::opaque_compiler_type_t type, CompilerType *function_pointer_type_ptr) override
bool IsConst(lldb::opaque_compiler_type_t type) override
std::unique_ptr< clang::CXXBaseSpecifier > CreateBaseClassSpecifier(lldb::opaque_compiler_type_t type, lldb::AccessType access, bool is_virtual, bool base_of_class)
CompilerType GetEnumerationIntegerType(lldb::opaque_compiler_type_t type) override
std::vector< CompilerDecl > DeclContextFindDeclByName(void *opaque_decl_ctx, ConstString name, const bool ignore_using_decls) override
const llvm::fltSemantics & GetFloatTypeSemantics(size_t byte_size, lldb::Format format) override
bool IsFloatingPointType(lldb::opaque_compiler_type_t type) override
llvm::Expected< uint32_t > GetIndexOfChildWithName(lldb::opaque_compiler_type_t type, llvm::StringRef name, bool omit_empty_base_classes) override
void setSema(clang::Sema *s)
uint32_t GetPointerByteSize() override
bool IsCompleteType(lldb::opaque_compiler_type_t type) override
CompilerType GetIntTypeFromBitSize(size_t bit_size, bool is_signed)
clang::MangleContext * getMangleContext()
void CompleteObjCInterfaceDecl(clang::ObjCInterfaceDecl *)
unsigned GetPtrAuthKey(lldb::opaque_compiler_type_t type) override
static void DumpDeclContextHiearchy(clang::DeclContext *decl_ctx)
CompilerDeclContext CreateDeclContext(clang::DeclContext *ctx)
Creates a CompilerDeclContext from the given DeclContext with the current TypeSystemClang instance as...
CompilerType GetTypeForFormatters(void *type) override
void SetMetadataAsUserID(const clang::Decl *decl, lldb::user_id_t user_id)
bool IsRuntimeGeneratedType(lldb::opaque_compiler_type_t type) override
This is used by swift.
static LanguageSet GetSupportedLanguagesForExpressions()
clang::FunctionDecl * CreateFunctionDeclaration(clang::DeclContext *decl_ctx, OptionalClangModuleID owning_module, llvm::StringRef name, const CompilerType &function_Type, clang::StorageClass storage, bool is_inline, llvm::StringRef asm_label)
CompilerType GetTypedefedType(lldb::opaque_compiler_type_t type) override
CompilerDeclContext GetCompilerDeclContextForType(const CompilerType &type) override
Returns the direct parent context of specified type.
std::unique_ptr< clang::SelectorTable > m_selector_table_up
PDBASTParser * GetPDBParser() override
std::optional< CompilerType::IntegralTemplateArgument > GetIntegralTemplateArgument(lldb::opaque_compiler_type_t type, size_t idx, bool expand_pack) override
bool DeclContextIsClassMethod(void *opaque_decl_ctx) override
bool IsMemberDataPointerType(lldb::opaque_compiler_type_t type) override
void SetTargetTriple(llvm::StringRef target_triple)
CompilerType GetVirtualBaseClassAtIndex(lldb::opaque_compiler_type_t type, size_t idx, uint32_t *bit_offset_ptr) override
static bool CheckOverloadedOperatorKindParameterCount(bool is_method, clang::OverloadedOperatorKind op_kind, uint32_t num_params)
clang::DeclarationName GetDeclarationName(llvm::StringRef name, const CompilerType &function_clang_type)
DeclMetadataMap m_decl_metadata
Maps Decls to their associated ClangASTMetadata.
static clang::CXXMethodDecl * DeclContextGetAsCXXMethodDecl(const CompilerDeclContext &dc)
CompilerType GetFullyUnqualifiedType(lldb::opaque_compiler_type_t type) override
uint32_t CountDeclLevels(clang::DeclContext *frame_decl_ctx, clang::DeclContext *child_decl_ctx, ConstString *child_name=nullptr, CompilerType *child_type=nullptr)
bool HasPointerAuthQualifier(lldb::opaque_compiler_type_t type) override
static clang::QualType GetQualType(lldb::opaque_compiler_type_t type)
clang::PrintingPolicy GetTypePrintingPolicy()
Returns the PrintingPolicy used when generating the internal type names.
uint32_t GetNumVirtualBaseClasses(lldb::opaque_compiler_type_t type) override
static clang::RecordDecl * GetAsRecordDecl(const CompilerType &type)
CompilerType GetPointerSizedIntType(bool is_signed)
uint32_t GetNumBaseClasses(const clang::CXXRecordDecl *cxx_record_decl, bool omit_empty_base_classes)
lldb::LanguageType DeclContextGetLanguage(void *opaque_decl_ctx) override
std::unique_ptr< DWARFASTParserClang > m_dwarf_ast_parser_up
CompilerType GetBuiltinTypeForDWARFEncodingAndBitSize(llvm::StringRef type_name, uint32_t dw_ate, uint32_t bit_size)
lldb::Encoding GetEncoding(lldb::opaque_compiler_type_t type) override
bool IsFunctionPointerType(lldb::opaque_compiler_type_t type) override
int GetFunctionArgumentCount(lldb::opaque_compiler_type_t type) override
static void BuildIndirectFields(const CompilerType &type)
std::unique_ptr< clang::FileManager > m_file_manager_up
uint32_t GetIndexForRecordBase(const clang::RecordDecl *record_decl, const clang::CXXBaseSpecifier *base_spec, bool omit_empty_base_classes)
bool IsAnonymousType(lldb::opaque_compiler_type_t type) override
bool Verify(lldb::opaque_compiler_type_t type) override
Verify the integrity of the type to catch CompilerTypes that mix and match invalid TypeSystem/Opaque ...
size_t GetNumberOfFunctionArguments(lldb::opaque_compiler_type_t type) override
void AddMethodOverridesForCXXRecordType(lldb::opaque_compiler_type_t type)
CompilerType CreateBlockPointerType(const CompilerType &function_type)
lldb::LanguageType GetMinimumLanguage(lldb::opaque_compiler_type_t type) override
bool FieldIsBitfield(clang::FieldDecl *field, uint32_t &bitfield_bit_size)
clang::ClassTemplateSpecializationDecl * CreateClassTemplateSpecializationDecl(clang::DeclContext *decl_ctx, OptionalClangModuleID owning_module, clang::ClassTemplateDecl *class_template_decl, int kind, const TemplateParameterInfos &infos)
llvm::SmallVector< clang::ParmVarDecl * > CreateParameterDeclarations(clang::FunctionDecl *context, const clang::FunctionProtoType &prototype, const llvm::SmallVector< llvm::StringRef > ¶m_names)
For each parameter type of prototype, creates a clang::ParmVarDecl whose clang::DeclContext is contex...
CompilerType CreateRecordType(clang::DeclContext *decl_ctx, OptionalClangModuleID owning_module, llvm::StringRef name, int kind, lldb::LanguageType language, std::optional< ClangASTMetadata > metadata=std::nullopt, bool exports_symbols=false)
std::unique_ptr< clang::HeaderSearch > m_header_search_up
void Finalize() override
Free up any resources associated with this TypeSystem.
clang::CXXMethodDecl * AddMethodToCXXRecordType(lldb::opaque_compiler_type_t type, llvm::StringRef name, llvm::StringRef asm_label, const CompilerType &method_type, bool is_virtual, bool is_static, bool is_inline, bool is_explicit, bool is_attr_used, bool is_artificial)
static clang::ASTContext * DeclContextGetTypeSystemClang(const CompilerDeclContext &dc)
uint32_t IsHomogeneousAggregate(lldb::opaque_compiler_type_t type, CompilerType *base_type_ptr) override
LLVM_DUMP_METHOD void dump(lldb::opaque_compiler_type_t type) const override
Convenience LLVM-style dump method for use in the debugger only.
clang::NamespaceDecl * GetUniqueNamespaceDeclaration(const char *name, clang::DeclContext *decl_ctx, OptionalClangModuleID owning_module, bool is_inline=false)
std::unique_ptr< clang::ASTContext > m_ast_up
CompilerType CreateGenericFunctionPrototype() override
static clang::QualType GetCanonicalQualType(lldb::opaque_compiler_type_t type)
CompilerType DeclGetFunctionReturnType(void *opaque_decl) override
CompilerType GetSizeType() override
static bool IsEnumType(lldb::opaque_compiler_type_t type)
static clang::CXXRecordDecl * GetAsCXXRecordDecl(lldb::opaque_compiler_type_t type)
CompilerType GetDirectNestedTypeWithName(lldb::opaque_compiler_type_t type, llvm::StringRef name) override
static bool SetObjCSuperClass(const CompilerType &type, const CompilerType &superclass_compiler_type)
clang::UsingDirectiveDecl * CreateUsingDirectiveDeclaration(clang::DeclContext *decl_ctx, OptionalClangModuleID owning_module, clang::NamespaceDecl *ns_decl)
static lldb::opaque_compiler_type_t GetOpaqueCompilerType(clang::ASTContext *ast, lldb::BasicType basic_type)
bool IsArrayType(lldb::opaque_compiler_type_t type, CompilerType *element_type, uint64_t *size, bool *is_incomplete) override
void DumpFromSymbolFile(Stream &s, llvm::StringRef symbol_name)
Dump clang AST types from the symbol file.
CompilerType AddConstModifier(lldb::opaque_compiler_type_t type) override
static void DumpDeclHiearchy(clang::Decl *decl)
static clang::ObjCMethodDecl * DeclContextGetAsObjCMethodDecl(const CompilerDeclContext &dc)
static clang::FunctionDecl * DeclContextGetAsFunctionDecl(const CompilerDeclContext &dc)
bool IsScalarType(lldb::opaque_compiler_type_t type) override
bool GetPtrAuthAddressDiversity(lldb::opaque_compiler_type_t type) override
std::shared_ptr< clang::TargetOptions > m_target_options_rp
lldb::TypeClass GetTypeClass(lldb::opaque_compiler_type_t type) override
static bool IsClassType(lldb::opaque_compiler_type_t type)
bool IsDefined(lldb::opaque_compiler_type_t type) override
static bool IsObjCClassType(const CompilerType &type)
TypeMetadataMap m_type_metadata
Maps Types to their associated ClangASTMetadata.
CompilerType GetCanonicalType(lldb::opaque_compiler_type_t type) override
bool RecordHasFields(const clang::RecordDecl *record_decl)
CompilerType GetFunctionArgumentAtIndex(lldb::opaque_compiler_type_t type, const size_t index) override
static std::optional< ClangASTMetadata > DeclContextGetMetaData(const CompilerDeclContext &dc, const clang::Decl *object)
static bool CompleteTagDeclarationDefinition(const CompilerType &type)
unsigned GetTypeQualifiers(lldb::opaque_compiler_type_t type) override
CompilerType GetPointerDiffType(bool is_signed) override
static clang::ObjCMethodDecl * AddMethodToObjCObjectType(const CompilerType &type, const char *name, const CompilerType &method_compiler_type, bool is_artificial, bool is_variadic, bool is_objc_direct_call)
~TypeSystemClang() override
CompilerDeclContext DeclGetDeclContext(void *opaque_decl) override
bool DeclContextIsContainedInLookup(void *opaque_decl_ctx, void *other_opaque_decl_ctx) override
CompilerType AddPtrAuthModifier(lldb::opaque_compiler_type_t type, uint32_t payload) override
static bool AddObjCClassProperty(const CompilerType &type, const char *property_name, const CompilerType &property_compiler_type, clang::ObjCIvarDecl *ivar_decl, const char *property_setter_name, const char *property_getter_name, uint32_t property_attributes, ClangASTMetadata metadata)
static bool SetHasExternalStorage(lldb::opaque_compiler_type_t type, bool has_extern)
void SetMetadata(const clang::Decl *object, ClangASTMetadata meta_data)
clang::ParmVarDecl * CreateParameterDeclaration(clang::DeclContext *decl_ctx, OptionalClangModuleID owning_module, const char *name, const CompilerType ¶m_type, int storage, bool add_decl=false)
void DumpTypeDescription(lldb::opaque_compiler_type_t type, lldb::DescriptionLevel level=lldb::eDescriptionLevelFull) override
Dump the type to stdout.
CompilerType GetFunctionArgumentTypeAtIndex(lldb::opaque_compiler_type_t type, size_t idx) override
static clang::NamespaceDecl * DeclContextGetAsNamespaceDecl(const CompilerDeclContext &dc)
CompilerType CreateEnumerationType(llvm::StringRef name, clang::DeclContext *decl_ctx, OptionalClangModuleID owning_module, const Declaration &decl, const CompilerType &integer_qual_type, bool is_scoped, std::optional< clang::EnumExtensibilityAttr::Kind > enum_kind=std::nullopt)
npdb::PdbAstBuilder * GetNativePDBParser() override
std::unique_ptr< clang::DiagnosticConsumer > m_diagnostic_consumer_up
CompilerType CreateObjCClass(llvm::StringRef name, clang::DeclContext *decl_ctx, OptionalClangModuleID owning_module, bool isInternal, std::optional< ClangASTMetadata > metadata=std::nullopt)
CompilerType GetTypeForDecl(clang::NamedDecl *decl)
CompilerType GetDirectBaseClassAtIndex(lldb::opaque_compiler_type_t type, size_t idx, uint32_t *bit_offset_ptr) override
CompilerType GetArrayElementType(lldb::opaque_compiler_type_t type, ExecutionContextScope *exe_scope) override
static clang::DeclContext * DeclContextGetAsDeclContext(const CompilerDeclContext &dc)
bool IsTypedefType(lldb::opaque_compiler_type_t type) override
CompilerType GetPointerType(lldb::opaque_compiler_type_t type) override
std::optional< size_t > GetTypeBitAlign(lldb::opaque_compiler_type_t type, ExecutionContextScope *exe_scope) override
void Dump(llvm::raw_ostream &output, llvm::StringRef filter, bool show_color) override
std::unique_ptr< clang::Builtin::Context > m_builtins_up
CompilerType GetBuiltinTypeByName(ConstString name) override
bool GetCompleteDecl(clang::Decl *decl)
static bool StartTagDeclarationDefinition(const CompilerType &type)
uint32_t GetIndexForRecordChild(const clang::RecordDecl *record_decl, clang::NamedDecl *canonical_decl, bool omit_empty_base_classes)
bool IsPossibleDynamicType(lldb::opaque_compiler_type_t type, CompilerType *target_type, bool check_cplusplus, bool check_objc) override
static clang::FieldDecl * AddFieldToRecordType(const CompilerType &type, llvm::StringRef name, const CompilerType &field_type, uint32_t bitfield_bit_size)
CompilerType GetOrCreateStructForIdentifier(llvm::StringRef type_name, const std::initializer_list< std::pair< const char *, CompilerType > > &type_fields, bool packed=false)
void LogCreation() const
Emits information about this TypeSystem into the expression log.
static llvm::StringRef GetPluginNameStatic()
clang::Sema * m_sema
The sema associated that is currently used to build this ASTContext.
size_t GetNumMemberFunctions(lldb::opaque_compiler_type_t type) override
CompilerType GetBasicTypeFromAST(lldb::BasicType basic_type) override
const clang::ClassTemplateSpecializationDecl * GetAsTemplateSpecialization(lldb::opaque_compiler_type_t type)
std::unique_ptr< clang::MangleContext > m_mangle_ctx_up
TypeMemberFunctionImpl GetMemberFunctionAtIndex(lldb::opaque_compiler_type_t type, size_t idx) override
bool IsTypeImpl(lldb::opaque_compiler_type_t type, llvm::function_ref< bool(clang::QualType)> predicate) const
size_t DeclGetFunctionNumArguments(void *opaque_decl) override
CompilerType GetAtomicType(lldb::opaque_compiler_type_t type) override
std::unique_ptr< PDBASTParser > m_pdb_ast_parser_up
std::unique_ptr< clang::DiagnosticsEngine > m_diagnostics_engine_up
static std::optional< std::string > GetCXXClassName(const CompilerType &type)
static void DumpTypeName(const CompilerType &type)
plugin::dwarf::DWARFASTParser * GetDWARFParser() override
CompilerType DeclGetFunctionArgumentType(void *opaque_decl, size_t arg_idx) override
bool IsPointerOrReferenceType(lldb::opaque_compiler_type_t type, CompilerType *pointee_type) override
static clang::EnumDecl * GetAsEnumDecl(const CompilerType &type)
CompilerType AddVolatileModifier(lldb::opaque_compiler_type_t type) override
std::unique_ptr< clang::ModuleMap > m_module_map_up
static bool IsObjCObjectOrInterfaceType(const CompilerType &type)
static void RequireCompleteType(CompilerType type)
Complete a type from debug info, or mark it as forcefully completed if there is no definition of the ...
CompilerType CreateTypedef(lldb::opaque_compiler_type_t type, const char *name, const CompilerDeclContext &decl_ctx, uint32_t opaque_payload) override
Using the current type, create a new typedef to that type using "typedef_name" as the name and "decl_...
llvm::Expected< uint32_t > GetNumChildren(lldb::opaque_compiler_type_t type, bool omit_empty_base_classes, const ExecutionContext *exe_ctx) override
CompilerType AddRestrictModifier(lldb::opaque_compiler_type_t type) override
clang::TemplateTemplateParmDecl * CreateTemplateTemplateParmDecl(const char *template_name)
lldb::TemplateArgumentKind GetTemplateArgumentKind(lldb::opaque_compiler_type_t type, size_t idx, bool expand_pack) override
clang::ASTContext & getASTContext() const
Returns the clang::ASTContext instance managed by this TypeSystemClang.
std::vector< lldb_private::CompilerContext > DeclGetCompilerContext(void *opaque_decl) override
static CompilerType CreateMemberPointerType(const CompilerType &type, const CompilerType &pointee_type)
std::vector< lldb_private::CompilerContext > DeclContextGetCompilerContext(void *opaque_decl_ctx) override
void CreateASTContext()
Creates the internal ASTContext.
void SetExternalSource(llvm::IntrusiveRefCntPtr< clang::ExternalASTSource > ast_source_sp)
CompilerType GetCStringType(bool is_const)
bool IsAggregateType(lldb::opaque_compiler_type_t type) override
bool IsPromotableIntegerType(lldb::opaque_compiler_type_t type) override
static bool IsObjCObjectPointerType(const CompilerType &type, CompilerType *target_type=nullptr)
bool IsVectorType(lldb::opaque_compiler_type_t type, CompilerType *element_type, uint64_t *size) override
static LanguageSet GetSupportedLanguagesForTypes()
clang::VarDecl * CreateVariableDeclaration(clang::DeclContext *decl_context, OptionalClangModuleID owning_module, const char *name, clang::QualType type)
clang::BlockDecl * CreateBlockDeclaration(clang::DeclContext *ctx, OptionalClangModuleID owning_module)
ConstString DeclContextGetName(void *opaque_decl_ctx) override
size_t GetNumTemplateArguments(lldb::opaque_compiler_type_t type, bool expand_pack) override
ConstString DeclGetName(void *opaque_decl) override
SymbolFile * GetSymbolFile() const
bool m_has_forcefully_completed_types
Used for reporting statistics.
Encapsulates a one-time expression for use in lldb.
virtual uint64_t GetData(DataExtractor &data, Status &error)
virtual uint64_t GetValueAsUnsigned(uint64_t fail_value, bool *success=nullptr)
AddressType GetAddressTypeOfChildren()
CompilerType GetCompilerType()
ConstString GetName() const
const ExecutionContextRef & GetExecutionContextRef() const
#define LLDB_INVALID_ADDRESS
#define LLDB_INVALID_IVAR_OFFSET
A class that represents a running process on the host machine.
Log * GetLog(Cat mask)
Retrieve the Log object for the channel associated with the given log enum.
lldb::offset_t DumpDataExtractor(const DataExtractor &DE, Stream *s, lldb::offset_t offset, lldb::Format item_format, size_t item_byte_size, size_t item_count, size_t num_per_line, uint64_t base_addr, uint32_t item_bit_size, uint32_t item_bit_offset, ExecutionContextScope *exe_scope=nullptr, bool show_memory_tags=false)
Dumps item_count objects into the stream s.
@ eAddressTypeLoad
Address is an address as in the current target inferior process.
std::shared_ptr< lldb_private::TypeSystem > TypeSystemSP
void * opaque_compiler_type_t
DescriptionLevel
Description levels for "void GetDescription(Stream *, DescriptionLevel)" calls.
@ eDescriptionLevelVerbose
BasicType
Basic types enumeration for the public API SBType::GetBasicType().
@ eBasicTypeUnsignedShort
@ eBasicTypeUnsignedInt128
@ eBasicTypeUnsignedWChar
@ eBasicTypeLongDoubleComplex
@ eBasicTypeUnsignedLongLong
@ eBasicTypeDoubleComplex
Format
Display format definitions.
@ eFormatCString
NULL terminated C strings.
@ eFormatCharArray
Print characters with no single quotes, used for character arrays that can contain non printable char...
@ eFormatVoid
Do not print this.
@ eFormatComplex
Floating point complex type.
@ eFormatOSType
OS character codes encoded into an integer 'PICT' 'text' etc...
@ eFormatCharPrintable
Only printable characters, '.' if not printable.
@ eFormatComplexInteger
Integer complex type.
@ eFormatFloat128
Disambiguate between 128-bit long double (which uses eFormatFloat) and __float128 (which uses eFormat...
LanguageType
Programming language type.
@ eLanguageTypeC_plus_plus_20
ISO C++:2020.
@ eLanguageTypeC_plus_plus_14
ISO C++:2014.
@ eLanguageTypeC11
ISO C:2011.
@ eLanguageTypeC99
ISO C:1999.
@ eLanguageTypeC_plus_plus_03
ISO C++:2003.
@ eLanguageTypeUnknown
Unknown or invalid language value.
@ eLanguageTypeC_plus_plus_17
ISO C++:2017.
@ eLanguageTypeObjC_plus_plus
Objective-C++.
@ eLanguageTypeC_plus_plus_11
ISO C++:2011.
@ eLanguageTypeC89
ISO C:1989.
@ eLanguageTypeC
Non-standardized C, such as K&R.
@ eLanguageTypeObjC
Objective-C.
@ eLanguageTypeC_plus_plus
ISO C++:1998.
@ eLanguageTypeDylan
Dylan.
std::shared_ptr< lldb_private::Type > TypeSP
@ eTemplateArgumentKindTemplate
@ eTemplateArgumentKindTemplateExpansion
@ eTemplateArgumentKindNull
@ eTemplateArgumentKindNullPtr
@ eTemplateArgumentKindDeclaration
@ eTemplateArgumentKindIntegral
@ eTemplateArgumentKindPack
@ eTemplateArgumentKindType
@ eTemplateArgumentKindStructuralValue
@ eTemplateArgumentKindExpression
Encoding
Register encoding definitions.
@ eEncodingVector
vector registers
@ eEncodingUint
unsigned integer
@ eEncodingSint
signed integer
MemberFunctionKind
Kind of member function.
@ eMemberFunctionKindInstanceMethod
A function that applies to a specific instance.
@ eMemberFunctionKindConstructor
A function used to create instances.
@ eMemberFunctionKindUnknown
Not sure what the type of this is.
@ eMemberFunctionKindDestructor
A function used to tear down existing instances.
@ eMemberFunctionKindStaticMethod
A function that applies to a type rather than any instance.
std::shared_ptr< lldb_private::TypeSystemClang > TypeSystemClangSP
std::shared_ptr< lldb_private::Target > TargetSP
static clang::QualType GetQualType(const CompilerType &ct)
static clang::QualType GetCanonicalQualType(const CompilerType &ct)
static bool IsClangType(const CompilerType &ct)
static CompilerType RemoveFastQualifiers(const CompilerType &ct)
static clang::TagDecl * GetAsTagDecl(const CompilerType &type)
static llvm::Expected< FunctionCallLabel > fromString(llvm::StringRef label)
Decodes the specified function label into a FunctionCallLabel.
A SmallBitVector that represents a set of source languages (lldb::LanguageType).
void Insert(lldb::LanguageType language)
A type-erased pair of llvm::dwarf::SourceLanguageName and version.