@@ -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,55 @@ 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))
858
868
DEFINE_MDNODE_GET(DIBasicType,
859
869
(unsigned Tag, StringRef Name, uint64_t SizeInBits,
860
- uint32_t AlignInBits, unsigned Encoding, DIFlags Flags),
861
- (Tag, Name, SizeInBits, AlignInBits, Encoding, Flags))
870
+ uint32_t AlignInBits, unsigned Encoding,
871
+ uint32_t NumExtraInhabitants, DIFlags Flags),
872
+ (Tag, Name, SizeInBits, AlignInBits, Encoding,
873
+ NumExtraInhabitants, Flags))
862
874
DEFINE_MDNODE_GET(DIBasicType,
863
875
(unsigned Tag, MDString *Name, uint64_t SizeInBits,
864
- uint32_t AlignInBits, unsigned Encoding, DIFlags Flags),
865
- (Tag, Name, SizeInBits, AlignInBits, Encoding, Flags))
876
+ uint32_t AlignInBits, unsigned Encoding,
877
+ uint32_t NumExtraInhabitants, DIFlags Flags),
878
+ (Tag, Name, SizeInBits, AlignInBits, Encoding,
879
+ NumExtraInhabitants, Flags))
866
880
867
881
TempDIBasicType clone() const { return cloneImpl (); }
868
882
@@ -890,7 +904,7 @@ class DIStringType : public DIType {
890
904
uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding,
891
905
ArrayRef<Metadata *> Ops)
892
906
: DIType(C, DIStringTypeKind, Storage, Tag, 0 , SizeInBits, AlignInBits, 0 ,
893
- FlagZero, Ops),
907
+ 0 , FlagZero, Ops),
894
908
Encoding (Encoding) {}
895
909
~DIStringType () = default ;
896
910
@@ -1016,7 +1030,7 @@ class DIDerivedType : public DIType {
1016
1030
std::optional<PtrAuthData> PtrAuthData, DIFlags Flags,
1017
1031
ArrayRef<Metadata *> Ops)
1018
1032
: DIType(C, DIDerivedTypeKind, Storage, Tag, Line, SizeInBits,
1019
- AlignInBits, OffsetInBits, Flags, Ops),
1033
+ AlignInBits, OffsetInBits, 0 , Flags, Ops),
1020
1034
DWARFAddressSpace (DWARFAddressSpace) {
1021
1035
if (PtrAuthData)
1022
1036
SubclassData32 = PtrAuthData->RawData ;
@@ -1157,39 +1171,43 @@ class DICompositeType : public DIType {
1157
1171
1158
1172
DICompositeType (LLVMContext &C, StorageType Storage, unsigned Tag,
1159
1173
unsigned Line, unsigned RuntimeLang, uint64_t SizeInBits,
1160
- uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags,
1174
+ uint32_t AlignInBits, uint64_t OffsetInBits,
1175
+ uint32_t NumExtraInhabitants, DIFlags Flags,
1161
1176
ArrayRef<Metadata *> Ops)
1162
1177
: DIType(C, DICompositeTypeKind, Storage, Tag, Line, SizeInBits,
1163
- AlignInBits, OffsetInBits, Flags, Ops),
1178
+ AlignInBits, OffsetInBits, NumExtraInhabitants, Flags, Ops),
1164
1179
RuntimeLang (RuntimeLang) {}
1165
1180
~DICompositeType () = default ;
1166
1181
1167
1182
// / Change fields in place.
1168
1183
void mutate (unsigned Tag, unsigned Line, unsigned RuntimeLang,
1169
1184
uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
1170
- DIFlags Flags) {
1185
+ uint32_t NumExtraInhabitants, DIFlags Flags) {
1171
1186
assert (isDistinct () && " Only distinct nodes can mutate" );
1172
1187
assert (getRawIdentifier () && " Only ODR-uniqued nodes should mutate" );
1173
1188
this ->RuntimeLang = RuntimeLang;
1174
- DIType::mutate (Tag, Line, SizeInBits, AlignInBits, OffsetInBits, Flags);
1189
+ DIType::mutate (Tag, Line, SizeInBits, AlignInBits, OffsetInBits,
1190
+ NumExtraInhabitants, Flags);
1175
1191
}
1176
1192
1177
1193
static DICompositeType *
1178
1194
getImpl (LLVMContext &Context, unsigned Tag, StringRef Name, Metadata *File,
1179
1195
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,
1196
+ uint32_t AlignInBits, uint64_t OffsetInBits,
1197
+ uint32_t NumExtraInhabitants, DIFlags Flags, DINodeArray Elements,
1198
+ unsigned RuntimeLang, DIType *VTableHolder,
1182
1199
DITemplateParameterArray TemplateParams, StringRef Identifier,
1183
1200
DIDerivedType *Discriminator, Metadata *DataLocation,
1184
1201
Metadata *Associated, Metadata *Allocated, Metadata *Rank,
1185
1202
DINodeArray Annotations, StorageType Storage,
1186
1203
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);
1204
+ return getImpl (Context, Tag, getCanonicalMDString (Context, Name), File,
1205
+ Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits,
1206
+ Flags, Elements.get (), RuntimeLang, VTableHolder,
1207
+ TemplateParams.get (),
1208
+ getCanonicalMDString (Context, Identifier), Discriminator,
1209
+ DataLocation, Associated, Allocated, Rank, Annotations.get (),
1210
+ NumExtraInhabitants, Storage, ShouldCreate);
1193
1211
}
1194
1212
static DICompositeType *
1195
1213
getImpl (LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File,
@@ -1199,7 +1217,8 @@ class DICompositeType : public DIType {
1199
1217
Metadata *VTableHolder, Metadata *TemplateParams,
1200
1218
MDString *Identifier, Metadata *Discriminator, Metadata *DataLocation,
1201
1219
Metadata *Associated, Metadata *Allocated, Metadata *Rank,
1202
- Metadata *Annotations, StorageType Storage, bool ShouldCreate = true );
1220
+ Metadata *Annotations, uint32_t NumExtraInhabitants,
1221
+ StorageType Storage, bool ShouldCreate = true );
1203
1222
1204
1223
TempDICompositeType cloneImpl () const {
1205
1224
return getTemporary (
@@ -1208,7 +1227,7 @@ class DICompositeType : public DIType {
1208
1227
getFlags (), getElements (), getRuntimeLang (), getVTableHolder (),
1209
1228
getTemplateParams (), getIdentifier (), getDiscriminator (),
1210
1229
getRawDataLocation (), getRawAssociated (), getRawAllocated (),
1211
- getRawRank (), getAnnotations ());
1230
+ getRawRank (), getAnnotations (), getNumExtraInhabitants () );
1212
1231
}
1213
1232
1214
1233
public:
@@ -1222,11 +1241,11 @@ class DICompositeType : public DIType {
1222
1241
StringRef Identifier = " " , DIDerivedType *Discriminator = nullptr ,
1223
1242
Metadata *DataLocation = nullptr , Metadata *Associated = nullptr ,
1224
1243
Metadata *Allocated = nullptr , Metadata *Rank = nullptr ,
1225
- DINodeArray Annotations = nullptr ),
1244
+ DINodeArray Annotations = nullptr , uint32_t NumExtraInhabitants = 0 ),
1226
1245
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
1227
- OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams ,
1228
- Identifier, Discriminator, DataLocation, Associated, Allocated, Rank ,
1229
- Annotations))
1246
+ OffsetInBits, NumExtraInhabitants, Flags, Elements, RuntimeLang,
1247
+ VTableHolder, TemplateParams, Identifier, Discriminator, DataLocation ,
1248
+ Associated, Allocated, Rank, Annotations))
1230
1249
DEFINE_MDNODE_GET(
1231
1250
DICompositeType,
1232
1251
(unsigned Tag, MDString *Name, Metadata *File, unsigned Line,
@@ -1236,11 +1255,12 @@ class DICompositeType : public DIType {
1236
1255
Metadata *TemplateParams = nullptr , MDString *Identifier = nullptr ,
1237
1256
Metadata *Discriminator = nullptr , Metadata *DataLocation = nullptr ,
1238
1257
Metadata *Associated = nullptr , Metadata *Allocated = nullptr ,
1239
- Metadata *Rank = nullptr , Metadata *Annotations = nullptr ),
1258
+ Metadata *Rank = nullptr , Metadata *Annotations = nullptr ,
1259
+ uint32_t NumExtraInhabitants = 0 ),
1240
1260
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
1241
1261
OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams,
1242
1262
Identifier, Discriminator, DataLocation, Associated, Allocated, Rank,
1243
- Annotations))
1263
+ Annotations, NumExtraInhabitants ))
1244
1264
1245
1265
TempDICompositeType clone() const { return cloneImpl (); }
1246
1266
@@ -1255,8 +1275,8 @@ class DICompositeType : public DIType {
1255
1275
getODRType (LLVMContext &Context, MDString &Identifier, unsigned Tag,
1256
1276
MDString *Name, Metadata *File, unsigned Line, Metadata *Scope,
1257
1277
Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
1258
- uint64_t OffsetInBits, DIFlags Flags, Metadata *Elements ,
1259
- unsigned RuntimeLang, Metadata *VTableHolder,
1278
+ uint64_t OffsetInBits, uint32_t NumExtraInhabitants, DIFlags Flags ,
1279
+ Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder,
1260
1280
Metadata *TemplateParams, Metadata *Discriminator,
1261
1281
Metadata *DataLocation, Metadata *Associated, Metadata *Allocated,
1262
1282
Metadata *Rank, Metadata *Annotations);
@@ -1272,15 +1292,14 @@ class DICompositeType : public DIType {
1272
1292
// /
1273
1293
// / If not \a LLVMContext::isODRUniquingDebugTypes(), this function returns
1274
1294
// / 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);
1295
+ static DICompositeType *buildODRType (
1296
+ LLVMContext &Context, MDString &Identifier, unsigned Tag, MDString *Name,
1297
+ Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType,
1298
+ uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
1299
+ uint32_t NumExtraInhabitants, DIFlags Flags, Metadata *Elements,
1300
+ unsigned RuntimeLang, Metadata *VTableHolder, Metadata *TemplateParams,
1301
+ Metadata *Discriminator, Metadata *DataLocation, Metadata *Associated,
1302
+ Metadata *Allocated, Metadata *Rank, Metadata *Annotations);
1284
1303
1285
1304
DIType *getBaseType () const { return cast_or_null<DIType>(getRawBaseType ()); }
1286
1305
DINodeArray getElements () const {
0 commit comments