Skip to content

Commit d864437

Browse files
authored
Merge pull request #9956 from swiftlang/michael137/enum-extensibility-final
[DebugInfo] Add new DW_AT_APPLE_enum_kind to encode enum_extensibility
2 parents ebb8966 + d3fb604 commit d864437

File tree

21 files changed

+513
-233
lines changed

21 files changed

+513
-233
lines changed

clang/lib/CodeGen/CGDebugInfo.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3617,13 +3617,17 @@ llvm::DIType *CGDebugInfo::CreateTypeDefinition(const EnumType *Ty) {
36173617
// Return a CompositeType for the enum itself.
36183618
llvm::DINodeArray EltArray = DBuilder.getOrCreateArray(Enumerators);
36193619

3620+
std::optional<clang::EnumExtensibilityAttr::Kind> EnumKind;
3621+
if (auto *Attr = ED->getAttr<clang::EnumExtensibilityAttr>())
3622+
EnumKind = Attr->getExtensibility();
3623+
36203624
llvm::DIFile *DefUnit = getOrCreateFile(ED->getLocation());
36213625
unsigned Line = getLineNumber(ED->getLocation());
36223626
llvm::DIScope *EnumContext = getDeclContextDescriptor(ED);
36233627
llvm::DIType *ClassTy = getOrCreateType(ED->getIntegerType(), DefUnit);
36243628
return DBuilder.createEnumerationType(
36253629
EnumContext, ED->getName(), DefUnit, Line, Size, Align, EltArray, ClassTy,
3626-
/*RunTimeLang=*/0, Identifier, ED->isScoped());
3630+
/*RunTimeLang=*/0, Identifier, ED->isScoped(), EnumKind);
36273631
}
36283632

36293633
llvm::DIMacro *CGDebugInfo::CreateMacro(llvm::DIMacroFile *Parent,
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s
2+
3+
// CHECK-NOT: enumKind
4+
// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "ClosedEnum"
5+
// CHECK-SAME: enumKind: DW_APPLE_ENUM_KIND_Closed)
6+
// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "OpenEnum"
7+
// CHECK-SAME: enumKind: DW_APPLE_ENUM_KIND_Open)
8+
// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "ClosedFlagEnum"
9+
// CHECK-SAME: enumKind: DW_APPLE_ENUM_KIND_Closed)
10+
// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "OpenFlagEnum"
11+
// CHECK-SAME: enumKind: DW_APPLE_ENUM_KIND_Open)
12+
// CHECK: !DICompositeType(tag: DW_TAG_enumeration_type, name: "MixedEnum"
13+
// CHECK-SAME: enumKind: DW_APPLE_ENUM_KIND_Open)
14+
15+
enum Enum {
16+
E0, E1
17+
};
18+
19+
enum FlagEnum {
20+
FE0 = 1 << 0, FE1 = 1 << 1
21+
};
22+
23+
enum __attribute__((enum_extensibility(closed))) ClosedEnum {
24+
A0, A1
25+
};
26+
27+
enum __attribute__((enum_extensibility(open))) OpenEnum {
28+
B0, B1
29+
};
30+
31+
enum __attribute__((enum_extensibility(closed),flag_enum)) ClosedFlagEnum {
32+
C0 = 1 << 0, C1 = 1 << 1
33+
};
34+
35+
enum __attribute__((enum_extensibility(open),flag_enum)) OpenFlagEnum {
36+
D0 = 1 << 0, D1 = 1 << 1
37+
};
38+
39+
enum __attribute__((enum_extensibility(open), enum_extensibility(closed))) MixedEnum {
40+
M0, M1
41+
};
42+
43+
enum Enum e;
44+
enum FlagEnum fe;
45+
enum ClosedEnum ce;
46+
enum OpenEnum oe;
47+
enum ClosedFlagEnum cfe;
48+
enum OpenFlagEnum ofe;
49+
enum MixedEnum me;

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

0 commit comments

Comments
 (0)