Skip to content

Commit e2a279f

Browse files
authored
Merge pull request #7798 from augusto2112/cp-runtime-lang-class
[DebugInfo][CGDebugInfo] Add RunTimeLang to more DIBuilder functions
2 parents f303816 + a7a3f0b commit e2a279f

File tree

4 files changed

+28
-23
lines changed

4 files changed

+28
-23
lines changed

clang/lib/CodeGen/CGDebugInfo.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3397,9 +3397,9 @@ llvm::DIType *CGDebugInfo::CreateTypeDefinition(const EnumType *Ty) {
33973397
unsigned Line = getLineNumber(ED->getLocation());
33983398
llvm::DIScope *EnumContext = getDeclContextDescriptor(ED);
33993399
llvm::DIType *ClassTy = getOrCreateType(ED->getIntegerType(), DefUnit);
3400-
return DBuilder.createEnumerationType(EnumContext, ED->getName(), DefUnit,
3401-
Line, Size, Align, EltArray, ClassTy,
3402-
Identifier, ED->isScoped());
3400+
return DBuilder.createEnumerationType(
3401+
EnumContext, ED->getName(), DefUnit, Line, Size, Align, EltArray, ClassTy,
3402+
/*RunTimeLang=*/0, Identifier, ED->isScoped());
34033403
}
34043404

34053405
llvm::DIMacro *CGDebugInfo::CreateMacro(llvm::DIMacroFile *Parent,

llvm/include/llvm/IR/DIBuilder.h

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,7 @@ namespace llvm {
433433
/// \param OffsetInBits Member offset.
434434
/// \param Flags Flags to encode member attribute, e.g. private
435435
/// \param Elements class members.
436+
/// \param RunTimeLang Optional parameter, Objective-C runtime version.
436437
/// \param VTableHolder Debug info of the base class that contains vtable
437438
/// for this type. This is used in
438439
/// DW_AT_containing_type. See DWARF documentation
@@ -443,8 +444,8 @@ namespace llvm {
443444
DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber,
444445
uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
445446
DINode::DIFlags Flags, DIType *DerivedFrom, DINodeArray Elements,
446-
DIType *VTableHolder = nullptr, MDNode *TemplateParms = nullptr,
447-
StringRef UniqueIdentifier = "");
447+
unsigned RunTimeLang = 0, DIType *VTableHolder = nullptr,
448+
MDNode *TemplateParms = nullptr, StringRef UniqueIdentifier = "");
448449

449450
/// Create debugging information entry for a struct.
450451
/// \param Scope Scope in which this struct is defined.
@@ -591,13 +592,15 @@ namespace llvm {
591592
/// \param AlignInBits Member alignment.
592593
/// \param Elements Enumeration elements.
593594
/// \param UnderlyingType Underlying type of a C++11/ObjC fixed enum.
595+
/// \param RunTimeLang Optional parameter, Objective-C runtime version.
594596
/// \param UniqueIdentifier A unique identifier for the enum.
595-
/// \param IsScoped Boolean flag indicate if this is C++11/ObjC 'enum class'.
597+
/// \param IsScoped Boolean flag indicate if this is C++11/ObjC 'enum
598+
/// class'.
596599
DICompositeType *createEnumerationType(
597600
DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber,
598601
uint64_t SizeInBits, uint32_t AlignInBits, DINodeArray Elements,
599-
DIType *UnderlyingType, StringRef UniqueIdentifier = "", bool IsScoped = false);
600-
602+
DIType *UnderlyingType, unsigned RunTimeLang = 0,
603+
StringRef UniqueIdentifier = "", bool IsScoped = false);
601604
/// Create debugging information entry for a set.
602605
/// \param Scope Scope in which this set is defined.
603606
/// \param Name Set name.

llvm/lib/IR/DIBuilder.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -490,14 +490,15 @@ DICompositeType *DIBuilder::createClassType(
490490
DIScope *Context, StringRef Name, DIFile *File, unsigned LineNumber,
491491
uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
492492
DINode::DIFlags Flags, DIType *DerivedFrom, DINodeArray Elements,
493-
DIType *VTableHolder, MDNode *TemplateParams, StringRef UniqueIdentifier) {
493+
unsigned RunTimeLang, DIType *VTableHolder, MDNode *TemplateParams,
494+
StringRef UniqueIdentifier) {
494495
assert((!Context || isa<DIScope>(Context)) &&
495496
"createClassType should be called with a valid Context");
496497

497498
auto *R = DICompositeType::get(
498499
VMContext, dwarf::DW_TAG_structure_type, Name, File, LineNumber,
499500
getNonCompileUnitScope(Context), DerivedFrom, SizeInBits, AlignInBits,
500-
OffsetInBits, Flags, Elements, 0, VTableHolder,
501+
OffsetInBits, Flags, Elements, RunTimeLang, VTableHolder,
501502
cast_or_null<MDTuple>(TemplateParams), UniqueIdentifier);
502503
trackIfUnresolved(R);
503504
return R;
@@ -551,15 +552,17 @@ DISubroutineType *DIBuilder::createSubroutineType(DITypeRefArray ParameterTypes,
551552
return DISubroutineType::get(VMContext, Flags, CC, ParameterTypes);
552553
}
553554

554-
DICompositeType *DIBuilder::createEnumerationType(
555-
DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber,
556-
uint64_t SizeInBits, uint32_t AlignInBits, DINodeArray Elements,
557-
DIType *UnderlyingType, StringRef UniqueIdentifier, bool IsScoped) {
555+
DICompositeType *
556+
DIBuilder::createEnumerationType(DIScope *Scope, StringRef Name, DIFile *File,
557+
unsigned LineNumber, uint64_t SizeInBits,
558+
uint32_t AlignInBits, DINodeArray Elements,
559+
DIType *UnderlyingType, unsigned RunTimeLang,
560+
StringRef UniqueIdentifier, bool IsScoped) {
558561
auto *CTy = DICompositeType::get(
559562
VMContext, dwarf::DW_TAG_enumeration_type, Name, File, LineNumber,
560563
getNonCompileUnitScope(Scope), UnderlyingType, SizeInBits, AlignInBits, 0,
561-
IsScoped ? DINode::FlagEnumClass : DINode::FlagZero, Elements, 0, nullptr,
562-
nullptr, UniqueIdentifier);
564+
IsScoped ? DINode::FlagEnumClass : DINode::FlagZero, Elements,
565+
RunTimeLang, nullptr, nullptr, UniqueIdentifier);
563566
AllEnumTypes.emplace_back(CTy);
564567
trackIfUnresolved(CTy);
565568
return CTy;

llvm/lib/IR/DebugInfo.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1467,13 +1467,12 @@ LLVMMetadataRef LLVMDIBuilderCreateClassType(LLVMDIBuilderRef Builder,
14671467
auto Elts = unwrap(Builder)->getOrCreateArray({unwrap(Elements),
14681468
NumElements});
14691469
return wrap(unwrap(Builder)->createClassType(
1470-
unwrapDI<DIScope>(Scope), {Name, NameLen},
1471-
unwrapDI<DIFile>(File), LineNumber,
1472-
SizeInBits, AlignInBits, OffsetInBits,
1473-
map_from_llvmDIFlags(Flags), unwrapDI<DIType>(DerivedFrom),
1474-
Elts, unwrapDI<DIType>(VTableHolder),
1475-
unwrapDI<MDNode>(TemplateParamsNode),
1476-
{UniqueIdentifier, UniqueIdentifierLen}));
1470+
unwrapDI<DIScope>(Scope), {Name, NameLen}, unwrapDI<DIFile>(File),
1471+
LineNumber, SizeInBits, AlignInBits, OffsetInBits,
1472+
map_from_llvmDIFlags(Flags), unwrapDI<DIType>(DerivedFrom), Elts,
1473+
/*RunTimeLang=*/0, unwrapDI<DIType>(VTableHolder),
1474+
unwrapDI<MDNode>(TemplateParamsNode),
1475+
{UniqueIdentifier, UniqueIdentifierLen}));
14771476
}
14781477

14791478
LLVMMetadataRef

0 commit comments

Comments
 (0)