@@ -712,31 +712,38 @@ class DIType : public DIScope {
712
712
DIFlags Flags;
713
713
uint64_t SizeInBits;
714
714
uint64_t OffsetInBits;
715
+ uint32_t NumExtraInhabitants;
715
716
716
717
protected:
717
718
DIType (LLVMContext &C, unsigned ID, StorageType Storage, unsigned Tag,
718
719
unsigned Line, uint64_t SizeInBits, uint32_t AlignInBits,
719
- uint64_t OffsetInBits, DIFlags Flags, ArrayRef<Metadata *> Ops)
720
+ uint64_t OffsetInBits, uint32_t NumExtraInhabitants, DIFlags Flags,
721
+ ArrayRef<Metadata *> Ops)
720
722
: DIScope(C, ID, Storage, Tag, Ops) {
721
- init (Line, SizeInBits, AlignInBits, OffsetInBits, Flags);
723
+ init (Line, SizeInBits, AlignInBits, OffsetInBits, NumExtraInhabitants,
724
+ Flags);
722
725
}
723
726
~DIType () = default ;
724
727
725
728
void init (unsigned Line, uint64_t SizeInBits, uint32_t AlignInBits,
726
- uint64_t OffsetInBits, DIFlags Flags) {
729
+ uint64_t OffsetInBits, uint32_t NumExtraInhabitants,
730
+ DIFlags Flags) {
727
731
this ->Line = Line;
728
732
this ->Flags = Flags;
729
733
this ->SizeInBits = SizeInBits;
730
734
this ->SubclassData32 = AlignInBits;
731
735
this ->OffsetInBits = OffsetInBits;
736
+ this ->NumExtraInhabitants = NumExtraInhabitants;
732
737
}
733
738
734
739
// / Change fields in place.
735
740
void mutate (unsigned Tag, unsigned Line, uint64_t SizeInBits,
736
- uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags) {
741
+ uint32_t AlignInBits, uint64_t OffsetInBits,
742
+ uint32_t NumExtraInhabitants, DIFlags Flags) {
737
743
assert (isDistinct () && " Only distinct nodes can mutate" );
738
744
setTag (Tag);
739
- init (Line, SizeInBits, AlignInBits, OffsetInBits, Flags);
745
+ init (Line, SizeInBits, AlignInBits, OffsetInBits, NumExtraInhabitants,
746
+ Flags);
740
747
}
741
748
742
749
public:
@@ -749,6 +756,7 @@ class DIType : public DIScope {
749
756
uint32_t getAlignInBits () const ;
750
757
uint32_t getAlignInBytes () const { return getAlignInBits () / CHAR_BIT; }
751
758
uint64_t getOffsetInBits () const { return OffsetInBits; }
759
+ uint32_t getNumExtraInhabitants () const { return NumExtraInhabitants; }
752
760
DIFlags getFlags () const { return Flags; }
753
761
754
762
DIScope *getScope () const { return cast_or_null<DIScope>(getRawScope ()); }
@@ -820,49 +828,63 @@ class DIBasicType : public DIType {
820
828
821
829
DIBasicType (LLVMContext &C, StorageType Storage, unsigned Tag,
822
830
uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding,
823
- DIFlags Flags, ArrayRef<Metadata *> Ops)
831
+ uint32_t NumExtraInhabitants, DIFlags Flags,
832
+ ArrayRef<Metadata *> Ops)
824
833
: DIType(C, DIBasicTypeKind, Storage, Tag, 0 , SizeInBits, AlignInBits, 0 ,
825
- Flags, Ops),
834
+ NumExtraInhabitants, Flags, Ops),
826
835
Encoding (Encoding) {}
827
836
~DIBasicType () = default ;
828
837
829
838
static DIBasicType *getImpl (LLVMContext &Context, unsigned Tag,
830
839
StringRef Name, uint64_t SizeInBits,
831
840
uint32_t AlignInBits, unsigned Encoding,
832
- DIFlags Flags, StorageType Storage ,
833
- bool ShouldCreate = true ) {
841
+ uint32_t NumExtraInhabitants, DIFlags Flags ,
842
+ StorageType Storage, bool ShouldCreate = true ) {
834
843
return getImpl (Context, Tag, getCanonicalMDString (Context, Name),
835
- SizeInBits, AlignInBits, Encoding, Flags, Storage ,
836
- ShouldCreate);
844
+ SizeInBits, AlignInBits, Encoding, NumExtraInhabitants ,
845
+ Flags, Storage, ShouldCreate);
837
846
}
838
847
static DIBasicType *getImpl (LLVMContext &Context, unsigned Tag,
839
848
MDString *Name, uint64_t SizeInBits,
840
849
uint32_t AlignInBits, unsigned Encoding,
841
- DIFlags Flags, StorageType Storage ,
842
- bool ShouldCreate = true );
850
+ uint32_t NumExtraInhabitants, DIFlags Flags ,
851
+ StorageType Storage, bool ShouldCreate = true );
843
852
844
853
TempDIBasicType cloneImpl () const {
845
854
return getTemporary (getContext (), getTag (), getName (), getSizeInBits (),
846
- getAlignInBits (), getEncoding (), getFlags ());
855
+ getAlignInBits (), getEncoding (),
856
+ getNumExtraInhabitants (), getFlags ());
847
857
}
848
858
849
859
public:
850
860
DEFINE_MDNODE_GET (DIBasicType, (unsigned Tag, StringRef Name),
851
- (Tag, Name, 0 , 0 , 0 , FlagZero))
861
+ (Tag, Name, 0 , 0 , 0 , 0 , FlagZero))
852
862
DEFINE_MDNODE_GET(DIBasicType,
853
863
(unsigned Tag, StringRef Name, uint64_t SizeInBits),
854
- (Tag, Name, SizeInBits, 0 , 0 , FlagZero))
864
+ (Tag, Name, SizeInBits, 0 , 0 , 0 , FlagZero))
855
865
DEFINE_MDNODE_GET(DIBasicType,
856
866
(unsigned Tag, MDString *Name, uint64_t SizeInBits),
857
- (Tag, Name, SizeInBits, 0 , 0 , FlagZero))
867
+ (Tag, Name, SizeInBits, 0 , 0 , 0 , FlagZero))
868
+ DEFINE_MDNODE_GET(DIBasicType,
869
+ (unsigned Tag, StringRef Name, uint64_t SizeInBits,
870
+ uint32_t AlignInBits, unsigned Encoding, DIFlags Flags),
871
+ (Tag, Name, SizeInBits, AlignInBits, Encoding, 0 , Flags))
872
+ DEFINE_MDNODE_GET(DIBasicType,
873
+ (unsigned Tag, MDString *Name, uint64_t SizeInBits,
874
+ uint32_t AlignInBits, unsigned Encoding, DIFlags Flags),
875
+ (Tag, Name, SizeInBits, AlignInBits, Encoding, 0 , Flags))
858
876
DEFINE_MDNODE_GET(DIBasicType,
859
877
(unsigned Tag, StringRef Name, uint64_t SizeInBits,
860
- uint32_t AlignInBits, unsigned Encoding, DIFlags Flags),
861
- (Tag, Name, SizeInBits, AlignInBits, Encoding, Flags))
878
+ uint32_t AlignInBits, unsigned Encoding,
879
+ uint32_t NumExtraInhabitants, DIFlags Flags),
880
+ (Tag, Name, SizeInBits, AlignInBits, Encoding,
881
+ NumExtraInhabitants, Flags))
862
882
DEFINE_MDNODE_GET(DIBasicType,
863
883
(unsigned Tag, MDString *Name, uint64_t SizeInBits,
864
- uint32_t AlignInBits, unsigned Encoding, DIFlags Flags),
865
- (Tag, Name, SizeInBits, AlignInBits, Encoding, Flags))
884
+ uint32_t AlignInBits, unsigned Encoding,
885
+ uint32_t NumExtraInhabitants, DIFlags Flags),
886
+ (Tag, Name, SizeInBits, AlignInBits, Encoding,
887
+ NumExtraInhabitants, Flags))
866
888
867
889
TempDIBasicType clone() const { return cloneImpl (); }
868
890
@@ -890,7 +912,7 @@ class DIStringType : public DIType {
890
912
uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding,
891
913
ArrayRef<Metadata *> Ops)
892
914
: DIType(C, DIStringTypeKind, Storage, Tag, 0 , SizeInBits, AlignInBits, 0 ,
893
- FlagZero, Ops),
915
+ 0 , FlagZero, Ops),
894
916
Encoding (Encoding) {}
895
917
~DIStringType () = default ;
896
918
@@ -1016,7 +1038,7 @@ class DIDerivedType : public DIType {
1016
1038
std::optional<PtrAuthData> PtrAuthData, DIFlags Flags,
1017
1039
ArrayRef<Metadata *> Ops)
1018
1040
: DIType(C, DIDerivedTypeKind, Storage, Tag, Line, SizeInBits,
1019
- AlignInBits, OffsetInBits, Flags, Ops),
1041
+ AlignInBits, OffsetInBits, 0 , Flags, Ops),
1020
1042
DWARFAddressSpace (DWARFAddressSpace) {
1021
1043
if (PtrAuthData)
1022
1044
SubclassData32 = PtrAuthData->RawData ;
@@ -1157,39 +1179,43 @@ class DICompositeType : public DIType {
1157
1179
1158
1180
DICompositeType (LLVMContext &C, StorageType Storage, unsigned Tag,
1159
1181
unsigned Line, unsigned RuntimeLang, uint64_t SizeInBits,
1160
- uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags,
1182
+ uint32_t AlignInBits, uint64_t OffsetInBits,
1183
+ uint32_t NumExtraInhabitants, DIFlags Flags,
1161
1184
ArrayRef<Metadata *> Ops)
1162
1185
: DIType(C, DICompositeTypeKind, Storage, Tag, Line, SizeInBits,
1163
- AlignInBits, OffsetInBits, Flags, Ops),
1186
+ AlignInBits, OffsetInBits, NumExtraInhabitants, Flags, Ops),
1164
1187
RuntimeLang (RuntimeLang) {}
1165
1188
~DICompositeType () = default ;
1166
1189
1167
1190
// / Change fields in place.
1168
1191
void mutate (unsigned Tag, unsigned Line, unsigned RuntimeLang,
1169
1192
uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
1170
- DIFlags Flags) {
1193
+ uint32_t NumExtraInhabitants, DIFlags Flags) {
1171
1194
assert (isDistinct () && " Only distinct nodes can mutate" );
1172
1195
assert (getRawIdentifier () && " Only ODR-uniqued nodes should mutate" );
1173
1196
this ->RuntimeLang = RuntimeLang;
1174
- DIType::mutate (Tag, Line, SizeInBits, AlignInBits, OffsetInBits, Flags);
1197
+ DIType::mutate (Tag, Line, SizeInBits, AlignInBits, OffsetInBits,
1198
+ NumExtraInhabitants, Flags);
1175
1199
}
1176
1200
1177
1201
static DICompositeType *
1178
1202
getImpl (LLVMContext &Context, unsigned Tag, StringRef Name, Metadata *File,
1179
1203
unsigned Line, DIScope *Scope, DIType *BaseType, uint64_t SizeInBits,
1180
- uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags,
1181
- DINodeArray Elements, unsigned RuntimeLang, DIType *VTableHolder,
1204
+ uint32_t AlignInBits, uint64_t OffsetInBits,
1205
+ uint32_t NumExtraInhabitants, DIFlags Flags, DINodeArray Elements,
1206
+ unsigned RuntimeLang, DIType *VTableHolder,
1182
1207
DITemplateParameterArray TemplateParams, StringRef Identifier,
1183
1208
DIDerivedType *Discriminator, Metadata *DataLocation,
1184
1209
Metadata *Associated, Metadata *Allocated, Metadata *Rank,
1185
1210
DINodeArray Annotations, StorageType Storage,
1186
1211
bool ShouldCreate = true ) {
1187
- return getImpl (
1188
- Context, Tag, getCanonicalMDString (Context, Name), File, Line, Scope,
1189
- BaseType, SizeInBits, AlignInBits, OffsetInBits, Flags, Elements.get (),
1190
- RuntimeLang, VTableHolder, TemplateParams.get (),
1191
- getCanonicalMDString (Context, Identifier), Discriminator, DataLocation,
1192
- Associated, Allocated, Rank, Annotations.get (), Storage, ShouldCreate);
1212
+ return getImpl (Context, Tag, getCanonicalMDString (Context, Name), File,
1213
+ Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits,
1214
+ Flags, Elements.get (), RuntimeLang, VTableHolder,
1215
+ TemplateParams.get (),
1216
+ getCanonicalMDString (Context, Identifier), Discriminator,
1217
+ DataLocation, Associated, Allocated, Rank, Annotations.get (),
1218
+ NumExtraInhabitants, Storage, ShouldCreate);
1193
1219
}
1194
1220
static DICompositeType *
1195
1221
getImpl (LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File,
@@ -1199,7 +1225,8 @@ class DICompositeType : public DIType {
1199
1225
Metadata *VTableHolder, Metadata *TemplateParams,
1200
1226
MDString *Identifier, Metadata *Discriminator, Metadata *DataLocation,
1201
1227
Metadata *Associated, Metadata *Allocated, Metadata *Rank,
1202
- Metadata *Annotations, StorageType Storage, bool ShouldCreate = true );
1228
+ Metadata *Annotations, uint32_t NumExtraInhabitants,
1229
+ StorageType Storage, bool ShouldCreate = true );
1203
1230
1204
1231
TempDICompositeType cloneImpl () const {
1205
1232
return getTemporary (
@@ -1208,7 +1235,7 @@ class DICompositeType : public DIType {
1208
1235
getFlags (), getElements (), getRuntimeLang (), getVTableHolder (),
1209
1236
getTemplateParams (), getIdentifier (), getDiscriminator (),
1210
1237
getRawDataLocation (), getRawAssociated (), getRawAllocated (),
1211
- getRawRank (), getAnnotations ());
1238
+ getRawRank (), getAnnotations (), getNumExtraInhabitants () );
1212
1239
}
1213
1240
1214
1241
public:
@@ -1222,11 +1249,11 @@ class DICompositeType : public DIType {
1222
1249
StringRef Identifier = " " , DIDerivedType *Discriminator = nullptr ,
1223
1250
Metadata *DataLocation = nullptr , Metadata *Associated = nullptr ,
1224
1251
Metadata *Allocated = nullptr , Metadata *Rank = nullptr ,
1225
- DINodeArray Annotations = nullptr ),
1252
+ DINodeArray Annotations = nullptr , uint32_t NumExtraInhabitants = 0 ),
1226
1253
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
1227
- OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams ,
1228
- Identifier, Discriminator, DataLocation, Associated, Allocated, Rank ,
1229
- Annotations))
1254
+ OffsetInBits, NumExtraInhabitants, Flags, Elements, RuntimeLang,
1255
+ VTableHolder, TemplateParams, Identifier, Discriminator, DataLocation ,
1256
+ Associated, Allocated, Rank, Annotations))
1230
1257
DEFINE_MDNODE_GET(
1231
1258
DICompositeType,
1232
1259
(unsigned Tag, MDString *Name, Metadata *File, unsigned Line,
@@ -1236,11 +1263,12 @@ class DICompositeType : public DIType {
1236
1263
Metadata *TemplateParams = nullptr , MDString *Identifier = nullptr ,
1237
1264
Metadata *Discriminator = nullptr , Metadata *DataLocation = nullptr ,
1238
1265
Metadata *Associated = nullptr , Metadata *Allocated = nullptr ,
1239
- Metadata *Rank = nullptr , Metadata *Annotations = nullptr ),
1266
+ Metadata *Rank = nullptr , Metadata *Annotations = nullptr ,
1267
+ uint32_t NumExtraInhabitants = 0 ),
1240
1268
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
1241
1269
OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams,
1242
1270
Identifier, Discriminator, DataLocation, Associated, Allocated, Rank,
1243
- Annotations))
1271
+ Annotations, NumExtraInhabitants ))
1244
1272
1245
1273
TempDICompositeType clone() const { return cloneImpl (); }
1246
1274
@@ -1255,8 +1283,8 @@ class DICompositeType : public DIType {
1255
1283
getODRType (LLVMContext &Context, MDString &Identifier, unsigned Tag,
1256
1284
MDString *Name, Metadata *File, unsigned Line, Metadata *Scope,
1257
1285
Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
1258
- uint64_t OffsetInBits, DIFlags Flags, Metadata *Elements ,
1259
- unsigned RuntimeLang, Metadata *VTableHolder,
1286
+ uint64_t OffsetInBits, uint32_t NumExtraInhabitants, DIFlags Flags ,
1287
+ Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder,
1260
1288
Metadata *TemplateParams, Metadata *Discriminator,
1261
1289
Metadata *DataLocation, Metadata *Associated, Metadata *Allocated,
1262
1290
Metadata *Rank, Metadata *Annotations);
@@ -1272,15 +1300,14 @@ class DICompositeType : public DIType {
1272
1300
// /
1273
1301
// / If not \a LLVMContext::isODRUniquingDebugTypes(), this function returns
1274
1302
// / nullptr.
1275
- static DICompositeType *
1276
- buildODRType (LLVMContext &Context, MDString &Identifier, unsigned Tag,
1277
- MDString *Name, Metadata *File, unsigned Line, Metadata *Scope,
1278
- Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
1279
- uint64_t OffsetInBits, DIFlags Flags, Metadata *Elements,
1280
- unsigned RuntimeLang, Metadata *VTableHolder,
1281
- Metadata *TemplateParams, Metadata *Discriminator,
1282
- Metadata *DataLocation, Metadata *Associated,
1283
- Metadata *Allocated, Metadata *Rank, Metadata *Annotations);
1303
+ static DICompositeType *buildODRType (
1304
+ LLVMContext &Context, MDString &Identifier, unsigned Tag, MDString *Name,
1305
+ Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType,
1306
+ uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
1307
+ uint32_t NumExtraInhabitants, DIFlags Flags, Metadata *Elements,
1308
+ unsigned RuntimeLang, Metadata *VTableHolder, Metadata *TemplateParams,
1309
+ Metadata *Discriminator, Metadata *DataLocation, Metadata *Associated,
1310
+ Metadata *Allocated, Metadata *Rank, Metadata *Annotations);
1284
1311
1285
1312
DIType *getBaseType () const { return cast_or_null<DIType>(getRawBaseType ()); }
1286
1313
DINodeArray getElements () const {
0 commit comments