diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index 84a166d3ac365..fc8088da998dd 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -3385,9 +3385,9 @@ llvm::DIType *CGDebugInfo::CreateTypeDefinition(const EnumType *Ty) { unsigned Line = getLineNumber(ED->getLocation()); llvm::DIScope *EnumContext = getDeclContextDescriptor(ED); llvm::DIType *ClassTy = getOrCreateType(ED->getIntegerType(), DefUnit); - return DBuilder.createEnumerationType(EnumContext, ED->getName(), DefUnit, - Line, Size, Align, EltArray, ClassTy, - Identifier, ED->isScoped()); + return DBuilder.createEnumerationType( + EnumContext, ED->getName(), DefUnit, Line, Size, Align, EltArray, ClassTy, + /*RunTimeLang=*/0, Identifier, ED->isScoped()); } llvm::DIMacro *CGDebugInfo::CreateMacro(llvm::DIMacroFile *Parent, diff --git a/llvm/include/llvm/IR/DIBuilder.h b/llvm/include/llvm/IR/DIBuilder.h index ecd6dd7b0a4f8..884e99300d2ff 100644 --- a/llvm/include/llvm/IR/DIBuilder.h +++ b/llvm/include/llvm/IR/DIBuilder.h @@ -424,6 +424,7 @@ namespace llvm { /// \param OffsetInBits Member offset. /// \param Flags Flags to encode member attribute, e.g. private /// \param Elements class members. + /// \param RunTimeLang Optional parameter, Objective-C runtime version. /// \param VTableHolder Debug info of the base class that contains vtable /// for this type. This is used in /// DW_AT_containing_type. See DWARF documentation @@ -434,8 +435,8 @@ namespace llvm { DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, DINode::DIFlags Flags, DIType *DerivedFrom, DINodeArray Elements, - DIType *VTableHolder = nullptr, MDNode *TemplateParms = nullptr, - StringRef UniqueIdentifier = ""); + unsigned RunTimeLang = 0, DIType *VTableHolder = nullptr, + MDNode *TemplateParms = nullptr, StringRef UniqueIdentifier = ""); /// Create debugging information entry for a struct. /// \param Scope Scope in which this struct is defined. @@ -578,13 +579,15 @@ namespace llvm { /// \param AlignInBits Member alignment. /// \param Elements Enumeration elements. /// \param UnderlyingType Underlying type of a C++11/ObjC fixed enum. + /// \param RunTimeLang Optional parameter, Objective-C runtime version. /// \param UniqueIdentifier A unique identifier for the enum. - /// \param IsScoped Boolean flag indicate if this is C++11/ObjC 'enum class'. + /// \param IsScoped Boolean flag indicate if this is C++11/ObjC 'enum + /// class'. DICompositeType *createEnumerationType( DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber, uint64_t SizeInBits, uint32_t AlignInBits, DINodeArray Elements, - DIType *UnderlyingType, StringRef UniqueIdentifier = "", bool IsScoped = false); - + DIType *UnderlyingType, unsigned RunTimeLang = 0, + StringRef UniqueIdentifier = "", bool IsScoped = false); /// Create debugging information entry for a set. /// \param Scope Scope in which this set is defined. /// \param Name Set name. diff --git a/llvm/lib/IR/DIBuilder.cpp b/llvm/lib/IR/DIBuilder.cpp index 1ce8c17f8a880..b466018e9a7d9 100644 --- a/llvm/lib/IR/DIBuilder.cpp +++ b/llvm/lib/IR/DIBuilder.cpp @@ -477,14 +477,15 @@ DICompositeType *DIBuilder::createClassType( DIScope *Context, StringRef Name, DIFile *File, unsigned LineNumber, uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, DINode::DIFlags Flags, DIType *DerivedFrom, DINodeArray Elements, - DIType *VTableHolder, MDNode *TemplateParams, StringRef UniqueIdentifier) { + unsigned RunTimeLang, DIType *VTableHolder, MDNode *TemplateParams, + StringRef UniqueIdentifier) { assert((!Context || isa(Context)) && "createClassType should be called with a valid Context"); auto *R = DICompositeType::get( VMContext, dwarf::DW_TAG_structure_type, Name, File, LineNumber, getNonCompileUnitScope(Context), DerivedFrom, SizeInBits, AlignInBits, - OffsetInBits, Flags, Elements, 0, VTableHolder, + OffsetInBits, Flags, Elements, RunTimeLang, VTableHolder, cast_or_null(TemplateParams), UniqueIdentifier); trackIfUnresolved(R); return R; @@ -535,15 +536,17 @@ DISubroutineType *DIBuilder::createSubroutineType(DITypeRefArray ParameterTypes, return DISubroutineType::get(VMContext, Flags, CC, ParameterTypes); } -DICompositeType *DIBuilder::createEnumerationType( - DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber, - uint64_t SizeInBits, uint32_t AlignInBits, DINodeArray Elements, - DIType *UnderlyingType, StringRef UniqueIdentifier, bool IsScoped) { +DICompositeType * +DIBuilder::createEnumerationType(DIScope *Scope, StringRef Name, DIFile *File, + unsigned LineNumber, uint64_t SizeInBits, + uint32_t AlignInBits, DINodeArray Elements, + DIType *UnderlyingType, unsigned RunTimeLang, + StringRef UniqueIdentifier, bool IsScoped) { auto *CTy = DICompositeType::get( VMContext, dwarf::DW_TAG_enumeration_type, Name, File, LineNumber, getNonCompileUnitScope(Scope), UnderlyingType, SizeInBits, AlignInBits, 0, - IsScoped ? DINode::FlagEnumClass : DINode::FlagZero, Elements, 0, nullptr, - nullptr, UniqueIdentifier); + IsScoped ? DINode::FlagEnumClass : DINode::FlagZero, Elements, + RunTimeLang, nullptr, nullptr, UniqueIdentifier); AllEnumTypes.emplace_back(CTy); trackIfUnresolved(CTy); return CTy; diff --git a/llvm/lib/IR/DebugInfo.cpp b/llvm/lib/IR/DebugInfo.cpp index 390a27c4bc0c4..501eec3dd99c1 100644 --- a/llvm/lib/IR/DebugInfo.cpp +++ b/llvm/lib/IR/DebugInfo.cpp @@ -1467,13 +1467,12 @@ LLVMMetadataRef LLVMDIBuilderCreateClassType(LLVMDIBuilderRef Builder, auto Elts = unwrap(Builder)->getOrCreateArray({unwrap(Elements), NumElements}); return wrap(unwrap(Builder)->createClassType( - unwrapDI(Scope), {Name, NameLen}, - unwrapDI(File), LineNumber, - SizeInBits, AlignInBits, OffsetInBits, - map_from_llvmDIFlags(Flags), unwrapDI(DerivedFrom), - Elts, unwrapDI(VTableHolder), - unwrapDI(TemplateParamsNode), - {UniqueIdentifier, UniqueIdentifierLen})); + unwrapDI(Scope), {Name, NameLen}, unwrapDI(File), + LineNumber, SizeInBits, AlignInBits, OffsetInBits, + map_from_llvmDIFlags(Flags), unwrapDI(DerivedFrom), Elts, + /*RunTimeLang=*/0, unwrapDI(VTableHolder), + unwrapDI(TemplateParamsNode), + {UniqueIdentifier, UniqueIdentifierLen})); } LLVMMetadataRef