@@ -712,31 +712,36 @@ 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, uint32_t NumExtraInhabitants, DIFlags Flags) {
737
742
assert (isDistinct () && " Only distinct nodes can mutate" );
738
743
setTag (Tag);
739
- init (Line, SizeInBits, AlignInBits, OffsetInBits, Flags);
744
+ init (Line, SizeInBits, AlignInBits, OffsetInBits, NumExtraInhabitants, Flags);
740
745
}
741
746
742
747
public:
@@ -749,6 +754,7 @@ class DIType : public DIScope {
749
754
uint32_t getAlignInBits () const { return SubclassData32; }
750
755
uint32_t getAlignInBytes () const { return getAlignInBits () / CHAR_BIT; }
751
756
uint64_t getOffsetInBits () const { return OffsetInBits; }
757
+ uint32_t getNumExtraInhabitants () const { return NumExtraInhabitants; }
752
758
DIFlags getFlags () const { return Flags; }
753
759
754
760
DIScope *getScope () const { return cast_or_null<DIScope>(getRawScope ()); }
@@ -820,49 +826,55 @@ class DIBasicType : public DIType {
820
826
821
827
DIBasicType (LLVMContext &C, StorageType Storage, unsigned Tag,
822
828
uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding,
823
- DIFlags Flags, ArrayRef<Metadata *> Ops)
829
+ uint32_t NumExtraInhabitants, DIFlags Flags,
830
+ ArrayRef<Metadata *> Ops)
824
831
: DIType(C, DIBasicTypeKind, Storage, Tag, 0 , SizeInBits, AlignInBits, 0 ,
825
- Flags, Ops),
832
+ NumExtraInhabitants, Flags, Ops),
826
833
Encoding (Encoding) {}
827
834
~DIBasicType () = default ;
828
835
829
836
static DIBasicType *getImpl (LLVMContext &Context, unsigned Tag,
830
837
StringRef Name, uint64_t SizeInBits,
831
838
uint32_t AlignInBits, unsigned Encoding,
832
- DIFlags Flags, StorageType Storage ,
833
- bool ShouldCreate = true ) {
839
+ uint32_t NumExtraInhabitants, DIFlags Flags ,
840
+ StorageType Storage, bool ShouldCreate = true ) {
834
841
return getImpl (Context, Tag, getCanonicalMDString (Context, Name),
835
- SizeInBits, AlignInBits, Encoding, Flags, Storage ,
836
- ShouldCreate);
842
+ SizeInBits, AlignInBits, Encoding, NumExtraInhabitants ,
843
+ Flags, Storage, ShouldCreate);
837
844
}
838
845
static DIBasicType *getImpl (LLVMContext &Context, unsigned Tag,
839
846
MDString *Name, uint64_t SizeInBits,
840
847
uint32_t AlignInBits, unsigned Encoding,
841
- DIFlags Flags, StorageType Storage ,
842
- bool ShouldCreate = true );
848
+ uint32_t NumExtraInhabitants, DIFlags Flags ,
849
+ StorageType Storage, bool ShouldCreate = true );
843
850
844
851
TempDIBasicType cloneImpl () const {
845
852
return getTemporary (getContext (), getTag (), getName (), getSizeInBits (),
846
- getAlignInBits (), getEncoding (), getFlags ());
853
+ getAlignInBits (), getEncoding (),
854
+ getNumExtraInhabitants (), getFlags ());
847
855
}
848
856
849
857
public:
850
858
DEFINE_MDNODE_GET (DIBasicType, (unsigned Tag, StringRef Name),
851
- (Tag, Name, 0 , 0 , 0 , FlagZero))
859
+ (Tag, Name, 0 , 0 , 0 , 0 , FlagZero))
852
860
DEFINE_MDNODE_GET(DIBasicType,
853
861
(unsigned Tag, StringRef Name, uint64_t SizeInBits),
854
- (Tag, Name, SizeInBits, 0 , 0 , FlagZero))
862
+ (Tag, Name, SizeInBits, 0 , 0 , 0 , FlagZero))
855
863
DEFINE_MDNODE_GET(DIBasicType,
856
864
(unsigned Tag, MDString *Name, uint64_t SizeInBits),
857
- (Tag, Name, SizeInBits, 0 , 0 , FlagZero))
865
+ (Tag, Name, SizeInBits, 0 , 0 , 0 , FlagZero))
858
866
DEFINE_MDNODE_GET(DIBasicType,
859
867
(unsigned Tag, StringRef Name, uint64_t SizeInBits,
860
- uint32_t AlignInBits, unsigned Encoding, DIFlags Flags),
861
- (Tag, Name, SizeInBits, AlignInBits, Encoding, Flags))
868
+ uint32_t AlignInBits, unsigned Encoding,
869
+ uint32_t NumExtraInhabitants, DIFlags Flags),
870
+ (Tag, Name, SizeInBits, AlignInBits, Encoding,
871
+ NumExtraInhabitants, Flags))
862
872
DEFINE_MDNODE_GET(DIBasicType,
863
873
(unsigned Tag, MDString *Name, uint64_t SizeInBits,
864
- uint32_t AlignInBits, unsigned Encoding, DIFlags Flags),
865
- (Tag, Name, SizeInBits, AlignInBits, Encoding, Flags))
874
+ uint32_t AlignInBits, unsigned Encoding,
875
+ uint32_t NumExtraInhabitants, DIFlags Flags),
876
+ (Tag, Name, SizeInBits, AlignInBits, Encoding,
877
+ NumExtraInhabitants, Flags))
866
878
867
879
TempDIBasicType clone() const { return cloneImpl (); }
868
880
@@ -890,7 +902,7 @@ class DIStringType : public DIType {
890
902
uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding,
891
903
ArrayRef<Metadata *> Ops)
892
904
: DIType(C, DIStringTypeKind, Storage, Tag, 0 , SizeInBits, AlignInBits, 0 ,
893
- FlagZero, Ops),
905
+ 0 , FlagZero, Ops),
894
906
Encoding (Encoding) {}
895
907
~DIStringType () = default ;
896
908
@@ -1012,11 +1024,12 @@ class DIDerivedType : public DIType {
1012
1024
DIDerivedType (LLVMContext &C, StorageType Storage, unsigned Tag,
1013
1025
unsigned Line, uint64_t SizeInBits, uint32_t AlignInBits,
1014
1026
uint64_t OffsetInBits,
1015
- std::optional<unsigned > DWARFAddressSpace, std::optional<PtrAuthData> PtrAuth, DIFlags Flags,
1027
+ std::optional<unsigned > DWARFAddressSpace,
1028
+ std::optional<PtrAuthData> PtrAuth, DIFlags Flags,
1016
1029
ArrayRef<Metadata *> Ops)
1017
1030
: DIType(C, DIDerivedTypeKind, Storage, Tag, Line, SizeInBits,
1018
- AlignInBits, OffsetInBits, Flags, Ops),
1019
- DWARFAddressSpace (DWARFAddressSpace), PtrAuth(PtrAuth) { }
1031
+ AlignInBits, OffsetInBits, 0 , Flags, Ops),
1032
+ DWARFAddressSpace (DWARFAddressSpace), PtrAuth(PtrAuth) {}
1020
1033
~DIDerivedType () = default ;
1021
1034
static DIDerivedType *
1022
1035
getImpl (LLVMContext &Context, unsigned Tag, StringRef Name, DIFile *File,
@@ -1157,39 +1170,43 @@ class DICompositeType : public DIType {
1157
1170
1158
1171
DICompositeType (LLVMContext &C, StorageType Storage, unsigned Tag,
1159
1172
unsigned Line, unsigned RuntimeLang, uint64_t SizeInBits,
1160
- uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags,
1173
+ uint32_t AlignInBits, uint64_t OffsetInBits,
1174
+ uint32_t NumExtraInhabitants, DIFlags Flags,
1161
1175
ArrayRef<Metadata *> Ops)
1162
1176
: DIType(C, DICompositeTypeKind, Storage, Tag, Line, SizeInBits,
1163
- AlignInBits, OffsetInBits, Flags, Ops),
1177
+ AlignInBits, OffsetInBits, NumExtraInhabitants, Flags, Ops),
1164
1178
RuntimeLang (RuntimeLang) {}
1165
1179
~DICompositeType () = default ;
1166
1180
1167
1181
// / Change fields in place.
1168
1182
void mutate (unsigned Tag, unsigned Line, unsigned RuntimeLang,
1169
1183
uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
1170
- DIFlags Flags) {
1184
+ uint32_t NumExtraInhabitants, DIFlags Flags) {
1171
1185
assert (isDistinct () && " Only distinct nodes can mutate" );
1172
1186
assert (getRawIdentifier () && " Only ODR-uniqued nodes should mutate" );
1173
1187
this ->RuntimeLang = RuntimeLang;
1174
- DIType::mutate (Tag, Line, SizeInBits, AlignInBits, OffsetInBits, Flags);
1188
+ DIType::mutate (Tag, Line, SizeInBits, AlignInBits, OffsetInBits,
1189
+ NumExtraInhabitants, Flags);
1175
1190
}
1176
1191
1177
1192
static DICompositeType *
1178
1193
getImpl (LLVMContext &Context, unsigned Tag, StringRef Name, Metadata *File,
1179
1194
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,
1195
+ uint32_t AlignInBits, uint64_t OffsetInBits,
1196
+ uint32_t NumExtraInhabitants, DIFlags Flags, DINodeArray Elements,
1197
+ unsigned RuntimeLang, DIType *VTableHolder,
1182
1198
DITemplateParameterArray TemplateParams, StringRef Identifier,
1183
1199
DIDerivedType *Discriminator, Metadata *DataLocation,
1184
1200
Metadata *Associated, Metadata *Allocated, Metadata *Rank,
1185
1201
DINodeArray Annotations, StorageType Storage,
1186
1202
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);
1203
+ return getImpl (Context, Tag, getCanonicalMDString (Context, Name), File,
1204
+ Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits,
1205
+ Flags, Elements.get (), RuntimeLang, VTableHolder,
1206
+ TemplateParams.get (),
1207
+ getCanonicalMDString (Context, Identifier), Discriminator,
1208
+ DataLocation, Associated, Allocated, Rank, Annotations.get (),
1209
+ NumExtraInhabitants, Storage, ShouldCreate);
1193
1210
}
1194
1211
static DICompositeType *
1195
1212
getImpl (LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File,
@@ -1199,7 +1216,8 @@ class DICompositeType : public DIType {
1199
1216
Metadata *VTableHolder, Metadata *TemplateParams,
1200
1217
MDString *Identifier, Metadata *Discriminator, Metadata *DataLocation,
1201
1218
Metadata *Associated, Metadata *Allocated, Metadata *Rank,
1202
- Metadata *Annotations, StorageType Storage, bool ShouldCreate = true );
1219
+ Metadata *Annotations, uint32_t NumExtraInhabitants,
1220
+ StorageType Storage, bool ShouldCreate = true );
1203
1221
1204
1222
TempDICompositeType cloneImpl () const {
1205
1223
return getTemporary (
@@ -1208,7 +1226,7 @@ class DICompositeType : public DIType {
1208
1226
getFlags (), getElements (), getRuntimeLang (), getVTableHolder (),
1209
1227
getTemplateParams (), getIdentifier (), getDiscriminator (),
1210
1228
getRawDataLocation (), getRawAssociated (), getRawAllocated (),
1211
- getRawRank (), getAnnotations ());
1229
+ getRawRank (), getAnnotations (), getNumExtraInhabitants () );
1212
1230
}
1213
1231
1214
1232
public:
@@ -1222,11 +1240,11 @@ class DICompositeType : public DIType {
1222
1240
StringRef Identifier = " " , DIDerivedType *Discriminator = nullptr ,
1223
1241
Metadata *DataLocation = nullptr , Metadata *Associated = nullptr ,
1224
1242
Metadata *Allocated = nullptr , Metadata *Rank = nullptr ,
1225
- DINodeArray Annotations = nullptr ),
1243
+ DINodeArray Annotations = nullptr , uint32_t NumExtraInhabitants = 0 ),
1226
1244
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
1227
- OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams ,
1228
- Identifier, Discriminator, DataLocation, Associated, Allocated, Rank ,
1229
- Annotations))
1245
+ OffsetInBits, NumExtraInhabitants, Flags, Elements, RuntimeLang,
1246
+ VTableHolder, TemplateParams, Identifier, Discriminator, DataLocation ,
1247
+ Associated, Allocated, Rank, Annotations))
1230
1248
DEFINE_MDNODE_GET(
1231
1249
DICompositeType,
1232
1250
(unsigned Tag, MDString *Name, Metadata *File, unsigned Line,
@@ -1236,11 +1254,12 @@ class DICompositeType : public DIType {
1236
1254
Metadata *TemplateParams = nullptr , MDString *Identifier = nullptr ,
1237
1255
Metadata *Discriminator = nullptr , Metadata *DataLocation = nullptr ,
1238
1256
Metadata *Associated = nullptr , Metadata *Allocated = nullptr ,
1239
- Metadata *Rank = nullptr , Metadata *Annotations = nullptr ),
1257
+ Metadata *Rank = nullptr , Metadata *Annotations = nullptr ,
1258
+ uint32_t NumExtraInhabitants = 0 ),
1240
1259
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
1241
1260
OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams,
1242
1261
Identifier, Discriminator, DataLocation, Associated, Allocated, Rank,
1243
- Annotations))
1262
+ Annotations, NumExtraInhabitants ))
1244
1263
1245
1264
TempDICompositeType clone() const { return cloneImpl (); }
1246
1265
@@ -1255,8 +1274,8 @@ class DICompositeType : public DIType {
1255
1274
getODRType (LLVMContext &Context, MDString &Identifier, unsigned Tag,
1256
1275
MDString *Name, Metadata *File, unsigned Line, Metadata *Scope,
1257
1276
Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
1258
- uint64_t OffsetInBits, DIFlags Flags, Metadata *Elements ,
1259
- unsigned RuntimeLang, Metadata *VTableHolder,
1277
+ uint64_t OffsetInBits, uint32_t NumExtraInhabitants, DIFlags Flags ,
1278
+ Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder,
1260
1279
Metadata *TemplateParams, Metadata *Discriminator,
1261
1280
Metadata *DataLocation, Metadata *Associated, Metadata *Allocated,
1262
1281
Metadata *Rank, Metadata *Annotations);
@@ -1272,15 +1291,14 @@ class DICompositeType : public DIType {
1272
1291
// /
1273
1292
// / If not \a LLVMContext::isODRUniquingDebugTypes(), this function returns
1274
1293
// / 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);
1294
+ static DICompositeType *buildODRType (
1295
+ LLVMContext &Context, MDString &Identifier, unsigned Tag, MDString *Name,
1296
+ Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType,
1297
+ uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
1298
+ uint32_t NumExtraInhabitants, DIFlags Flags, Metadata *Elements,
1299
+ unsigned RuntimeLang, Metadata *VTableHolder, Metadata *TemplateParams,
1300
+ Metadata *Discriminator, Metadata *DataLocation, Metadata *Associated,
1301
+ Metadata *Allocated, Metadata *Rank, Metadata *Annotations);
1284
1302
1285
1303
DIType *getBaseType () const { return cast_or_null<DIType>(getRawBaseType ()); }
1286
1304
DINodeArray getElements () const {
0 commit comments