Skip to content

Commit f5d6880

Browse files
committed
[llvm][DebugInfo] Introduce DW_AT_APPLE_enum_kind attribute
1 parent 30e548b commit f5d6880

File tree

19 files changed

+459
-232
lines changed

19 files changed

+459
-232
lines changed

llvm/include/llvm/AsmParser/LLToken.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,7 @@ enum Kind {
488488
DwarfMacinfo, // DW_MACINFO_foo
489489
ChecksumKind, // CSK_foo
490490
DbgRecordType, // dbg_foo
491+
DwarfEnumKind, // DW_APPLE_ENUM_KIND_foo
491492

492493
// Type valued tokens (TyVal).
493494
Type,

llvm/include/llvm/BinaryFormat/Dwarf.def

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
(defined HANDLE_DW_CFA && defined HANDLE_DW_CFA_PRED) || \
2525
defined HANDLE_DW_APPLE_PROPERTY || defined HANDLE_DW_UT || \
2626
defined HANDLE_DWARF_SECTION || defined HANDLE_DW_IDX || \
27-
defined HANDLE_DW_END || defined HANDLE_DW_SECT)
27+
defined HANDLE_DW_END || defined HANDLE_DW_SECT || \
28+
defined HANDLE_DW_APPLE_ENUM_KIND)
2829
#error "Missing macro definition of HANDLE_DW*"
2930
#endif
3031

@@ -146,6 +147,10 @@
146147
#define HANDLE_DW_SECT(ID, NAME)
147148
#endif
148149

150+
#ifndef HANDLE_DW_APPLE_ENUM_KIND
151+
#define HANDLE_DW_APPLE_ENUM_KIND(ID, NAME)
152+
#endif
153+
149154
HANDLE_DW_TAG(0x0000, null, 2, DWARF, DW_KIND_NONE)
150155
HANDLE_DW_TAG(0x0001, array_type, 2, DWARF, DW_KIND_TYPE)
151156
HANDLE_DW_TAG(0x0002, class_type, 2, DWARF, DW_KIND_TYPE)
@@ -636,6 +641,7 @@ HANDLE_DW_AT(0x3fed, APPLE_property, 0, APPLE)
636641
HANDLE_DW_AT(0x3fee, APPLE_objc_direct, 0, APPLE)
637642
HANDLE_DW_AT(0x3fef, APPLE_sdk, 0, APPLE)
638643
HANDLE_DW_AT(0x3ff0, APPLE_origin, 0, APPLE)
644+
HANDLE_DW_AT(0x3ff1, APPLE_enum_kind, 0, APPLE)
639645

640646
// Attribute form encodings.
641647
HANDLE_DW_FORM(0x01, addr, 2, DWARF)
@@ -1268,6 +1274,11 @@ HANDLE_DW_APPLE_PROPERTY(0x1000, nullability)
12681274
HANDLE_DW_APPLE_PROPERTY(0x2000, null_resettable)
12691275
HANDLE_DW_APPLE_PROPERTY(0x4000, class)
12701276

1277+
// Enum kinds.
1278+
// Keep in sync with EnumExtensibilityAttr::Kind.
1279+
HANDLE_DW_APPLE_ENUM_KIND(0x00, Closed)
1280+
HANDLE_DW_APPLE_ENUM_KIND(0x01, Open)
1281+
12711282
// DWARF v5 Unit Types.
12721283
HANDLE_DW_UT(0x01, compile)
12731284
HANDLE_DW_UT(0x02, type)
@@ -1366,3 +1377,4 @@ HANDLE_DW_SECT(8, RNGLISTS)
13661377
#undef HANDLE_DW_IDX
13671378
#undef HANDLE_DW_END
13681379
#undef HANDLE_DW_SECT
1380+
#undef HANDLE_DW_APPLE_ENUM_KIND

llvm/include/llvm/BinaryFormat/Dwarf.h

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,10 @@ namespace dwarf {
4444
enum LLVMConstants : uint32_t {
4545
/// LLVM mock tags (see also llvm/BinaryFormat/Dwarf.def).
4646
/// \{
47-
DW_TAG_invalid = ~0U, ///< Tag for invalid results.
48-
DW_VIRTUALITY_invalid = ~0U, ///< Virtuality for invalid results.
49-
DW_MACINFO_invalid = ~0U, ///< Macinfo type for invalid results.
47+
DW_TAG_invalid = ~0U, ///< Tag for invalid results.
48+
DW_VIRTUALITY_invalid = ~0U, ///< Virtuality for invalid results.
49+
DW_MACINFO_invalid = ~0U, ///< Macinfo type for invalid results.
50+
DW_APPLE_ENUM_KIND_invalid = ~0U, ///< Enum kind for invalid results.
5051
/// \}
5152

5253
/// Special values for an initial length field.
@@ -198,6 +199,12 @@ enum VirtualityAttribute {
198199
DW_VIRTUALITY_max = 0x02
199200
};
200201

202+
enum EnumKindAttribute {
203+
#define HANDLE_DW_APPLE_ENUM_KIND(ID, NAME) DW_APPLE_ENUM_KIND_##NAME = ID,
204+
#include "llvm/BinaryFormat/Dwarf.def"
205+
DW_APPLE_ENUM_KIND_max = 0x01
206+
};
207+
201208
enum DefaultedMemberAttribute {
202209
#define HANDLE_DW_DEFAULTED(ID, NAME) DW_DEFAULTED_##NAME = ID,
203210
#include "llvm/BinaryFormat/Dwarf.def"
@@ -974,6 +981,7 @@ StringRef AccessibilityString(unsigned Access);
974981
StringRef DefaultedMemberString(unsigned DefaultedEncodings);
975982
StringRef VisibilityString(unsigned Visibility);
976983
StringRef VirtualityString(unsigned Virtuality);
984+
StringRef EnumKindString(unsigned EnumKind);
977985
StringRef LanguageString(unsigned Language);
978986
StringRef CaseString(unsigned Case);
979987
StringRef ConventionString(unsigned Convention);
@@ -1013,6 +1021,7 @@ unsigned getOperationEncoding(StringRef OperationEncodingString);
10131021
unsigned getSubOperationEncoding(unsigned OpEncoding,
10141022
StringRef SubOperationEncodingString);
10151023
unsigned getVirtuality(StringRef VirtualityString);
1024+
unsigned getEnumKind(StringRef EnumKindString);
10161025
unsigned getLanguage(StringRef LanguageString);
10171026
unsigned getCallingConvention(StringRef LanguageString);
10181027
unsigned getAttributeEncoding(StringRef EncodingString);

llvm/include/llvm/IR/DIBuilder.h

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,8 @@ namespace llvm {
631631
DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber,
632632
uint64_t SizeInBits, uint32_t AlignInBits, DINodeArray Elements,
633633
DIType *UnderlyingType, unsigned RunTimeLang = 0,
634-
StringRef UniqueIdentifier = "", bool IsScoped = false);
634+
StringRef UniqueIdentifier = "", bool IsScoped = false,
635+
std::optional<uint32_t> EnumKind = std::nullopt);
635636
/// Create debugging information entry for a set.
636637
/// \param Scope Scope in which this set is defined.
637638
/// \param Name Set name.
@@ -666,19 +667,20 @@ namespace llvm {
666667
static DIType *createObjectPointerType(DIType *Ty);
667668

668669
/// Create a permanent forward-declared type.
669-
DICompositeType *createForwardDecl(unsigned Tag, StringRef Name,
670-
DIScope *Scope, DIFile *F, unsigned Line,
671-
unsigned RuntimeLang = 0,
672-
uint64_t SizeInBits = 0,
673-
uint32_t AlignInBits = 0,
674-
StringRef UniqueIdentifier = "");
670+
DICompositeType *
671+
createForwardDecl(unsigned Tag, StringRef Name, DIScope *Scope, DIFile *F,
672+
unsigned Line, unsigned RuntimeLang = 0,
673+
uint64_t SizeInBits = 0, uint32_t AlignInBits = 0,
674+
StringRef UniqueIdentifier = "",
675+
std::optional<uint32_t> EnumKind = std::nullopt);
675676

676677
/// Create a temporary forward-declared type.
677678
DICompositeType *createReplaceableCompositeType(
678679
unsigned Tag, StringRef Name, DIScope *Scope, DIFile *F, unsigned Line,
679680
unsigned RuntimeLang = 0, uint64_t SizeInBits = 0,
680681
uint32_t AlignInBits = 0, DINode::DIFlags Flags = DINode::FlagFwdDecl,
681-
StringRef UniqueIdentifier = "", DINodeArray Annotations = nullptr);
682+
StringRef UniqueIdentifier = "", DINodeArray Annotations = nullptr,
683+
std::optional<uint32_t> EnumKind = std::nullopt);
682684

683685
/// Retain DIScope* in a module even if it is not referenced
684686
/// through debug info anchors.

llvm/include/llvm/IR/DebugInfoMetadata.h

Lines changed: 43 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1180,24 +1180,28 @@ class DICompositeType : public DIType {
11801180
friend class MDNode;
11811181

11821182
unsigned RuntimeLang;
1183+
std::optional<uint32_t> EnumKind;
11831184

11841185
DICompositeType(LLVMContext &C, StorageType Storage, unsigned Tag,
11851186
unsigned Line, unsigned RuntimeLang, uint64_t SizeInBits,
11861187
uint32_t AlignInBits, uint64_t OffsetInBits,
1187-
uint32_t NumExtraInhabitants, DIFlags Flags,
1188+
uint32_t NumExtraInhabitants,
1189+
std::optional<uint32_t> EnumKind, DIFlags Flags,
11881190
ArrayRef<Metadata *> Ops)
11891191
: DIType(C, DICompositeTypeKind, Storage, Tag, Line, SizeInBits,
11901192
AlignInBits, OffsetInBits, NumExtraInhabitants, Flags, Ops),
1191-
RuntimeLang(RuntimeLang) {}
1193+
RuntimeLang(RuntimeLang), EnumKind(EnumKind) {}
11921194
~DICompositeType() = default;
11931195

11941196
/// Change fields in place.
11951197
void mutate(unsigned Tag, unsigned Line, unsigned RuntimeLang,
11961198
uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
1197-
uint32_t NumExtraInhabitants, DIFlags Flags) {
1199+
uint32_t NumExtraInhabitants, std::optional<uint32_t> EnumKind,
1200+
DIFlags Flags) {
11981201
assert(isDistinct() && "Only distinct nodes can mutate");
11991202
assert(getRawIdentifier() && "Only ODR-uniqued nodes should mutate");
12001203
this->RuntimeLang = RuntimeLang;
1204+
this->EnumKind = EnumKind;
12011205
DIType::mutate(Tag, Line, SizeInBits, AlignInBits, OffsetInBits,
12021206
NumExtraInhabitants, Flags);
12031207
}
@@ -1207,15 +1211,15 @@ class DICompositeType : public DIType {
12071211
unsigned Line, DIScope *Scope, DIType *BaseType, uint64_t SizeInBits,
12081212
uint32_t AlignInBits, uint64_t OffsetInBits, DIType *Specification,
12091213
uint32_t NumExtraInhabitants, DIFlags Flags, DINodeArray Elements,
1210-
unsigned RuntimeLang, DIType *VTableHolder,
1211-
DITemplateParameterArray TemplateParams, StringRef Identifier,
1212-
DIDerivedType *Discriminator, Metadata *DataLocation,
1213-
Metadata *Associated, Metadata *Allocated, Metadata *Rank,
1214-
DINodeArray Annotations, StorageType Storage,
1214+
unsigned RuntimeLang, std::optional<uint32_t> EnumKind,
1215+
DIType *VTableHolder, DITemplateParameterArray TemplateParams,
1216+
StringRef Identifier, DIDerivedType *Discriminator,
1217+
Metadata *DataLocation, Metadata *Associated, Metadata *Allocated,
1218+
Metadata *Rank, DINodeArray Annotations, StorageType Storage,
12151219
bool ShouldCreate = true) {
12161220
return getImpl(Context, Tag, getCanonicalMDString(Context, Name), File,
12171221
Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits,
1218-
Flags, Elements.get(), RuntimeLang, VTableHolder,
1222+
Flags, Elements.get(), RuntimeLang, EnumKind, VTableHolder,
12191223
TemplateParams.get(),
12201224
getCanonicalMDString(Context, Identifier), Discriminator,
12211225
DataLocation, Associated, Allocated, Rank, Annotations.get(),
@@ -1226,21 +1230,21 @@ class DICompositeType : public DIType {
12261230
unsigned Line, Metadata *Scope, Metadata *BaseType,
12271231
uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
12281232
DIFlags Flags, Metadata *Elements, unsigned RuntimeLang,
1229-
Metadata *VTableHolder, Metadata *TemplateParams,
1230-
MDString *Identifier, Metadata *Discriminator, Metadata *DataLocation,
1231-
Metadata *Associated, Metadata *Allocated, Metadata *Rank,
1232-
Metadata *Annotations, Metadata *Specification,
1233-
uint32_t NumExtraInhabitants, StorageType Storage,
1234-
bool ShouldCreate = true);
1233+
std::optional<uint32_t> EnumKind, Metadata *VTableHolder,
1234+
Metadata *TemplateParams, MDString *Identifier,
1235+
Metadata *Discriminator, Metadata *DataLocation, Metadata *Associated,
1236+
Metadata *Allocated, Metadata *Rank, Metadata *Annotations,
1237+
Metadata *Specification, uint32_t NumExtraInhabitants,
1238+
StorageType Storage, bool ShouldCreate = true);
12351239

12361240
TempDICompositeType cloneImpl() const {
12371241
return getTemporary(
12381242
getContext(), getTag(), getName(), getFile(), getLine(), getScope(),
12391243
getBaseType(), getSizeInBits(), getAlignInBits(), getOffsetInBits(),
1240-
getFlags(), getElements(), getRuntimeLang(), getVTableHolder(),
1241-
getTemplateParams(), getIdentifier(), getDiscriminator(),
1242-
getRawDataLocation(), getRawAssociated(), getRawAllocated(),
1243-
getRawRank(), getAnnotations(), getSpecification(),
1244+
getFlags(), getElements(), getRuntimeLang(), getEnumKind(),
1245+
getVTableHolder(), getTemplateParams(), getIdentifier(),
1246+
getDiscriminator(), getRawDataLocation(), getRawAssociated(),
1247+
getRawAllocated(), getRawRank(), getAnnotations(), getSpecification(),
12441248
getNumExtraInhabitants());
12451249
}
12461250

@@ -1250,7 +1254,8 @@ class DICompositeType : public DIType {
12501254
(unsigned Tag, StringRef Name, DIFile *File, unsigned Line,
12511255
DIScope *Scope, DIType *BaseType, uint64_t SizeInBits,
12521256
uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags,
1253-
DINodeArray Elements, unsigned RuntimeLang, DIType *VTableHolder,
1257+
DINodeArray Elements, unsigned RuntimeLang,
1258+
std::optional<uint32_t> EnumKind, DIType *VTableHolder,
12541259
DITemplateParameterArray TemplateParams = nullptr,
12551260
StringRef Identifier = "", DIDerivedType *Discriminator = nullptr,
12561261
Metadata *DataLocation = nullptr, Metadata *Associated = nullptr,
@@ -1259,23 +1264,24 @@ class DICompositeType : public DIType {
12591264
uint32_t NumExtraInhabitants = 0),
12601265
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
12611266
OffsetInBits, Specification, NumExtraInhabitants, Flags, Elements,
1262-
RuntimeLang, VTableHolder, TemplateParams, Identifier, Discriminator,
1263-
DataLocation, Associated, Allocated, Rank, Annotations))
1267+
RuntimeLang, EnumKind, VTableHolder, TemplateParams, Identifier,
1268+
Discriminator, DataLocation, Associated, Allocated, Rank, Annotations))
12641269
DEFINE_MDNODE_GET(
12651270
DICompositeType,
12661271
(unsigned Tag, MDString *Name, Metadata *File, unsigned Line,
12671272
Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits,
12681273
uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags,
1269-
Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder,
1274+
Metadata *Elements, unsigned RuntimeLang,
1275+
std::optional<uint32_t> EnumKind, Metadata *VTableHolder,
12701276
Metadata *TemplateParams = nullptr, MDString *Identifier = nullptr,
12711277
Metadata *Discriminator = nullptr, Metadata *DataLocation = nullptr,
12721278
Metadata *Associated = nullptr, Metadata *Allocated = nullptr,
12731279
Metadata *Rank = nullptr, Metadata *Annotations = nullptr,
12741280
Metadata *Specification = nullptr, uint32_t NumExtraInhabitants = 0),
12751281
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
1276-
OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams,
1277-
Identifier, Discriminator, DataLocation, Associated, Allocated, Rank,
1278-
Annotations, Specification, NumExtraInhabitants))
1282+
OffsetInBits, Flags, Elements, RuntimeLang, EnumKind, VTableHolder,
1283+
TemplateParams, Identifier, Discriminator, DataLocation, Associated,
1284+
Allocated, Rank, Annotations, Specification, NumExtraInhabitants))
12791285

12801286
TempDICompositeType clone() const { return cloneImpl(); }
12811287

@@ -1292,10 +1298,11 @@ class DICompositeType : public DIType {
12921298
Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
12931299
uint64_t OffsetInBits, Metadata *Specification,
12941300
uint32_t NumExtraInhabitants, DIFlags Flags, Metadata *Elements,
1295-
unsigned RuntimeLang, Metadata *VTableHolder,
1296-
Metadata *TemplateParams, Metadata *Discriminator,
1297-
Metadata *DataLocation, Metadata *Associated, Metadata *Allocated,
1298-
Metadata *Rank, Metadata *Annotations);
1301+
unsigned RuntimeLang, std::optional<uint32_t> EnumKind,
1302+
Metadata *VTableHolder, Metadata *TemplateParams,
1303+
Metadata *Discriminator, Metadata *DataLocation,
1304+
Metadata *Associated, Metadata *Allocated, Metadata *Rank,
1305+
Metadata *Annotations);
12991306
static DICompositeType *getODRTypeIfExists(LLVMContext &Context,
13001307
MDString &Identifier);
13011308

@@ -1314,10 +1321,11 @@ class DICompositeType : public DIType {
13141321
Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
13151322
uint64_t OffsetInBits, Metadata *Specification,
13161323
uint32_t NumExtraInhabitants, DIFlags Flags, Metadata *Elements,
1317-
unsigned RuntimeLang, Metadata *VTableHolder,
1318-
Metadata *TemplateParams, Metadata *Discriminator,
1319-
Metadata *DataLocation, Metadata *Associated,
1320-
Metadata *Allocated, Metadata *Rank, Metadata *Annotations);
1324+
unsigned RuntimeLang, std::optional<uint32_t> EnumKind,
1325+
Metadata *VTableHolder, Metadata *TemplateParams,
1326+
Metadata *Discriminator, Metadata *DataLocation,
1327+
Metadata *Associated, Metadata *Allocated, Metadata *Rank,
1328+
Metadata *Annotations);
13211329

13221330
DIType *getBaseType() const { return cast_or_null<DIType>(getRawBaseType()); }
13231331
DINodeArray getElements() const {
@@ -1331,6 +1339,7 @@ class DICompositeType : public DIType {
13311339
}
13321340
StringRef getIdentifier() const { return getStringOperand(7); }
13331341
unsigned getRuntimeLang() const { return RuntimeLang; }
1342+
std::optional<uint32_t> getEnumKind() const { return EnumKind; }
13341343

13351344
Metadata *getRawBaseType() const { return getOperand(3); }
13361345
Metadata *getRawElements() const { return getOperand(4); }

llvm/lib/AsmParser/LLLexer.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,7 @@ lltok::Kind LLLexer::LexIdentifier() {
930930
DWKEYWORD(CC, DwarfCC);
931931
DWKEYWORD(OP, DwarfOp);
932932
DWKEYWORD(MACINFO, DwarfMacinfo);
933+
DWKEYWORD(APPLE_ENUM_KIND, DwarfEnumKind);
933934

934935
#undef DWKEYWORD
935936

llvm/lib/AsmParser/LLParser.cpp

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4627,6 +4627,12 @@ struct DwarfCCField : public MDUnsignedField {
46274627
DwarfCCField() : MDUnsignedField(0, dwarf::DW_CC_hi_user) {}
46284628
};
46294629

4630+
struct DwarfEnumKindField : public MDUnsignedField {
4631+
DwarfEnumKindField()
4632+
: MDUnsignedField(dwarf::DW_APPLE_ENUM_KIND_invalid,
4633+
dwarf::DW_APPLE_ENUM_KIND_max) {}
4634+
};
4635+
46304636
struct EmissionKindField : public MDUnsignedField {
46314637
EmissionKindField() : MDUnsignedField(0, DICompileUnit::LastEmissionKind) {}
46324638
};
@@ -4804,6 +4810,25 @@ bool LLParser::parseMDField(LocTy Loc, StringRef Name,
48044810
return false;
48054811
}
48064812

4813+
template <>
4814+
bool LLParser::parseMDField(LocTy Loc, StringRef Name,
4815+
DwarfEnumKindField &Result) {
4816+
if (Lex.getKind() == lltok::APSInt)
4817+
return parseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result));
4818+
4819+
if (Lex.getKind() != lltok::DwarfEnumKind)
4820+
return tokError("expected DWARF enum kind code");
4821+
4822+
unsigned EnumKind = dwarf::getEnumKind(Lex.getStrVal());
4823+
if (EnumKind == dwarf::DW_APPLE_ENUM_KIND_invalid)
4824+
return tokError("invalid DWARF enum kind code" + Twine(" '") +
4825+
Lex.getStrVal() + "'");
4826+
assert(EnumKind <= Result.Max && "Expected valid DWARF enum kind code");
4827+
Result.assign(EnumKind);
4828+
Lex.Lex();
4829+
return false;
4830+
}
4831+
48074832
template <>
48084833
bool LLParser::parseMDField(LocTy Loc, StringRef Name, DwarfLangField &Result) {
48094834
if (Lex.getKind() == lltok::APSInt)
@@ -5423,6 +5448,7 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
54235448
OPTIONAL(flags, DIFlagField, ); \
54245449
OPTIONAL(elements, MDField, ); \
54255450
OPTIONAL(runtimeLang, DwarfLangField, ); \
5451+
OPTIONAL(enumKind, DwarfEnumKindField, ); \
54265452
OPTIONAL(vtableHolder, MDField, ); \
54275453
OPTIONAL(templateParams, MDField, ); \
54285454
OPTIONAL(identifier, MDStringField, ); \
@@ -5444,15 +5470,19 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
54445470
else if (rank.isMDField())
54455471
Rank = rank.getMDFieldValue();
54465472

5473+
std::optional<unsigned> EnumKind;
5474+
if (enumKind.Val != dwarf::DW_APPLE_ENUM_KIND_invalid)
5475+
EnumKind = enumKind.Val;
5476+
54475477
// If this has an identifier try to build an ODR type.
54485478
if (identifier.Val)
54495479
if (auto *CT = DICompositeType::buildODRType(
54505480
Context, *identifier.Val, tag.Val, name.Val, file.Val, line.Val,
54515481
scope.Val, baseType.Val, size.Val, align.Val, offset.Val,
54525482
specification.Val, num_extra_inhabitants.Val, flags.Val,
5453-
elements.Val, runtimeLang.Val, vtableHolder.Val, templateParams.Val,
5454-
discriminator.Val, dataLocation.Val, associated.Val, allocated.Val,
5455-
Rank, annotations.Val)) {
5483+
elements.Val, runtimeLang.Val, EnumKind, vtableHolder.Val,
5484+
templateParams.Val, discriminator.Val, dataLocation.Val,
5485+
associated.Val, allocated.Val, Rank, annotations.Val)) {
54565486
Result = CT;
54575487
return false;
54585488
}
@@ -5463,9 +5493,10 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
54635493
DICompositeType,
54645494
(Context, tag.Val, name.Val, file.Val, line.Val, scope.Val, baseType.Val,
54655495
size.Val, align.Val, offset.Val, flags.Val, elements.Val,
5466-
runtimeLang.Val, vtableHolder.Val, templateParams.Val, identifier.Val,
5467-
discriminator.Val, dataLocation.Val, associated.Val, allocated.Val, Rank,
5468-
annotations.Val, specification.Val, num_extra_inhabitants.Val));
5496+
runtimeLang.Val, EnumKind, vtableHolder.Val, templateParams.Val,
5497+
identifier.Val, discriminator.Val, dataLocation.Val, associated.Val,
5498+
allocated.Val, Rank, annotations.Val, specification.Val,
5499+
num_extra_inhabitants.Val));
54695500
return false;
54705501
}
54715502

0 commit comments

Comments
 (0)