@@ -1180,24 +1180,28 @@ class DICompositeType : public DIType {
1180
1180
friend class MDNode ;
1181
1181
1182
1182
unsigned RuntimeLang;
1183
+ std::optional<uint32_t > EnumKind;
1183
1184
1184
1185
DICompositeType (LLVMContext &C, StorageType Storage, unsigned Tag,
1185
1186
unsigned Line, unsigned RuntimeLang, uint64_t SizeInBits,
1186
1187
uint32_t AlignInBits, uint64_t OffsetInBits,
1187
- uint32_t NumExtraInhabitants, DIFlags Flags,
1188
+ uint32_t NumExtraInhabitants,
1189
+ std::optional<uint32_t > EnumKind, DIFlags Flags,
1188
1190
ArrayRef<Metadata *> Ops)
1189
1191
: DIType(C, DICompositeTypeKind, Storage, Tag, Line, SizeInBits,
1190
1192
AlignInBits, OffsetInBits, NumExtraInhabitants, Flags, Ops),
1191
- RuntimeLang (RuntimeLang) {}
1193
+ RuntimeLang (RuntimeLang), EnumKind(EnumKind) {}
1192
1194
~DICompositeType () = default ;
1193
1195
1194
1196
// / Change fields in place.
1195
1197
void mutate (unsigned Tag, unsigned Line, unsigned RuntimeLang,
1196
1198
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) {
1198
1201
assert (isDistinct () && " Only distinct nodes can mutate" );
1199
1202
assert (getRawIdentifier () && " Only ODR-uniqued nodes should mutate" );
1200
1203
this ->RuntimeLang = RuntimeLang;
1204
+ this ->EnumKind = EnumKind;
1201
1205
DIType::mutate (Tag, Line, SizeInBits, AlignInBits, OffsetInBits,
1202
1206
NumExtraInhabitants, Flags);
1203
1207
}
@@ -1207,15 +1211,15 @@ class DICompositeType : public DIType {
1207
1211
unsigned Line, DIScope *Scope, DIType *BaseType, uint64_t SizeInBits,
1208
1212
uint32_t AlignInBits, uint64_t OffsetInBits, DIType *Specification,
1209
1213
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,
1215
1219
bool ShouldCreate = true ) {
1216
1220
return getImpl (Context, Tag, getCanonicalMDString (Context, Name), File,
1217
1221
Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits,
1218
- Flags, Elements.get (), RuntimeLang, VTableHolder,
1222
+ Flags, Elements.get (), RuntimeLang, EnumKind, VTableHolder,
1219
1223
TemplateParams.get (),
1220
1224
getCanonicalMDString (Context, Identifier), Discriminator,
1221
1225
DataLocation, Associated, Allocated, Rank, Annotations.get (),
@@ -1226,21 +1230,21 @@ class DICompositeType : public DIType {
1226
1230
unsigned Line, Metadata *Scope, Metadata *BaseType,
1227
1231
uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
1228
1232
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 );
1235
1239
1236
1240
TempDICompositeType cloneImpl () const {
1237
1241
return getTemporary (
1238
1242
getContext (), getTag (), getName (), getFile (), getLine (), getScope (),
1239
1243
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 (),
1244
1248
getNumExtraInhabitants ());
1245
1249
}
1246
1250
@@ -1250,7 +1254,8 @@ class DICompositeType : public DIType {
1250
1254
(unsigned Tag, StringRef Name, DIFile *File, unsigned Line,
1251
1255
DIScope *Scope, DIType *BaseType, uint64_t SizeInBits,
1252
1256
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,
1254
1259
DITemplateParameterArray TemplateParams = nullptr ,
1255
1260
StringRef Identifier = " " , DIDerivedType *Discriminator = nullptr ,
1256
1261
Metadata *DataLocation = nullptr , Metadata *Associated = nullptr ,
@@ -1259,23 +1264,24 @@ class DICompositeType : public DIType {
1259
1264
uint32_t NumExtraInhabitants = 0 ),
1260
1265
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
1261
1266
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))
1264
1269
DEFINE_MDNODE_GET(
1265
1270
DICompositeType,
1266
1271
(unsigned Tag, MDString *Name, Metadata *File, unsigned Line,
1267
1272
Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits,
1268
1273
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,
1270
1276
Metadata *TemplateParams = nullptr , MDString *Identifier = nullptr ,
1271
1277
Metadata *Discriminator = nullptr , Metadata *DataLocation = nullptr ,
1272
1278
Metadata *Associated = nullptr , Metadata *Allocated = nullptr ,
1273
1279
Metadata *Rank = nullptr , Metadata *Annotations = nullptr ,
1274
1280
Metadata *Specification = nullptr , uint32_t NumExtraInhabitants = 0 ),
1275
1281
(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))
1279
1285
1280
1286
TempDICompositeType clone() const { return cloneImpl (); }
1281
1287
@@ -1292,10 +1298,11 @@ class DICompositeType : public DIType {
1292
1298
Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
1293
1299
uint64_t OffsetInBits, Metadata *Specification,
1294
1300
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);
1299
1306
static DICompositeType *getODRTypeIfExists (LLVMContext &Context,
1300
1307
MDString &Identifier);
1301
1308
@@ -1314,10 +1321,11 @@ class DICompositeType : public DIType {
1314
1321
Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
1315
1322
uint64_t OffsetInBits, Metadata *Specification,
1316
1323
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);
1321
1329
1322
1330
DIType *getBaseType () const { return cast_or_null<DIType>(getRawBaseType ()); }
1323
1331
DINodeArray getElements () const {
@@ -1331,6 +1339,7 @@ class DICompositeType : public DIType {
1331
1339
}
1332
1340
StringRef getIdentifier () const { return getStringOperand (7 ); }
1333
1341
unsigned getRuntimeLang () const { return RuntimeLang; }
1342
+ std::optional<uint32_t > getEnumKind () const { return EnumKind; }
1334
1343
1335
1344
Metadata *getRawBaseType () const { return getOperand (3 ); }
1336
1345
Metadata *getRawElements () const { return getOperand (4 ); }
0 commit comments