@@ -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 ); }
0 commit comments