@@ -712,31 +712,36 @@ class DIType : public DIScope {
712712 DIFlags Flags;
713713 uint64_t SizeInBits;
714714 uint64_t OffsetInBits;
715+ uint32_t NumExtraInhabitants;
715716
716717protected:
717718 DIType (LLVMContext &C, unsigned ID, StorageType Storage, unsigned Tag,
718719 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)
720722 : DIScope(C, ID, Storage, Tag, Ops) {
721- init (Line, SizeInBits, AlignInBits, OffsetInBits, Flags);
723+ init (Line, SizeInBits, AlignInBits, OffsetInBits, NumExtraInhabitants,
724+ Flags);
722725 }
723726 ~DIType () = default ;
724727
725728 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) {
727731 this ->Line = Line;
728732 this ->Flags = Flags;
729733 this ->SizeInBits = SizeInBits;
730734 this ->SubclassData32 = AlignInBits;
731735 this ->OffsetInBits = OffsetInBits;
736+ this ->NumExtraInhabitants = NumExtraInhabitants;
732737 }
733738
734739 // / Change fields in place.
735740 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) {
737742 assert (isDistinct () && " Only distinct nodes can mutate" );
738743 setTag (Tag);
739- init (Line, SizeInBits, AlignInBits, OffsetInBits, Flags);
744+ init (Line, SizeInBits, AlignInBits, OffsetInBits, NumExtraInhabitants, Flags);
740745 }
741746
742747public:
@@ -749,6 +754,7 @@ class DIType : public DIScope {
749754 uint32_t getAlignInBits () const { return SubclassData32; }
750755 uint32_t getAlignInBytes () const { return getAlignInBits () / CHAR_BIT; }
751756 uint64_t getOffsetInBits () const { return OffsetInBits; }
757+ uint32_t getNumExtraInhabitants () const { return NumExtraInhabitants; }
752758 DIFlags getFlags () const { return Flags; }
753759
754760 DIScope *getScope () const { return cast_or_null<DIScope>(getRawScope ()); }
@@ -820,49 +826,55 @@ class DIBasicType : public DIType {
820826
821827 DIBasicType (LLVMContext &C, StorageType Storage, unsigned Tag,
822828 uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding,
823- DIFlags Flags, ArrayRef<Metadata *> Ops)
829+ uint32_t NumExtraInhabitants, DIFlags Flags,
830+ ArrayRef<Metadata *> Ops)
824831 : DIType(C, DIBasicTypeKind, Storage, Tag, 0 , SizeInBits, AlignInBits, 0 ,
825- Flags, Ops),
832+ NumExtraInhabitants, Flags, Ops),
826833 Encoding (Encoding) {}
827834 ~DIBasicType () = default ;
828835
829836 static DIBasicType *getImpl (LLVMContext &Context, unsigned Tag,
830837 StringRef Name, uint64_t SizeInBits,
831838 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 ) {
834841 return getImpl (Context, Tag, getCanonicalMDString (Context, Name),
835- SizeInBits, AlignInBits, Encoding, Flags, Storage ,
836- ShouldCreate);
842+ SizeInBits, AlignInBits, Encoding, NumExtraInhabitants ,
843+ Flags, Storage, ShouldCreate);
837844 }
838845 static DIBasicType *getImpl (LLVMContext &Context, unsigned Tag,
839846 MDString *Name, uint64_t SizeInBits,
840847 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 );
843850
844851 TempDIBasicType cloneImpl () const {
845852 return getTemporary (getContext (), getTag (), getName (), getSizeInBits (),
846- getAlignInBits (), getEncoding (), getFlags ());
853+ getAlignInBits (), getEncoding (),
854+ getNumExtraInhabitants (), getFlags ());
847855 }
848856
849857public:
850858 DEFINE_MDNODE_GET (DIBasicType, (unsigned Tag, StringRef Name),
851- (Tag, Name, 0 , 0 , 0 , FlagZero))
859+ (Tag, Name, 0 , 0 , 0 , 0 , FlagZero))
852860 DEFINE_MDNODE_GET(DIBasicType,
853861 (unsigned Tag, StringRef Name, uint64_t SizeInBits),
854- (Tag, Name, SizeInBits, 0 , 0 , FlagZero))
862+ (Tag, Name, SizeInBits, 0 , 0 , 0 , FlagZero))
855863 DEFINE_MDNODE_GET(DIBasicType,
856864 (unsigned Tag, MDString *Name, uint64_t SizeInBits),
857- (Tag, Name, SizeInBits, 0 , 0 , FlagZero))
865+ (Tag, Name, SizeInBits, 0 , 0 , 0 , FlagZero))
858866 DEFINE_MDNODE_GET(DIBasicType,
859867 (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))
862872 DEFINE_MDNODE_GET(DIBasicType,
863873 (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))
866878
867879 TempDIBasicType clone() const { return cloneImpl (); }
868880
@@ -890,7 +902,7 @@ class DIStringType : public DIType {
890902 uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding,
891903 ArrayRef<Metadata *> Ops)
892904 : DIType(C, DIStringTypeKind, Storage, Tag, 0 , SizeInBits, AlignInBits, 0 ,
893- FlagZero, Ops),
905+ 0 , FlagZero, Ops),
894906 Encoding (Encoding) {}
895907 ~DIStringType () = default ;
896908
@@ -1012,11 +1024,12 @@ class DIDerivedType : public DIType {
10121024 DIDerivedType (LLVMContext &C, StorageType Storage, unsigned Tag,
10131025 unsigned Line, uint64_t SizeInBits, uint32_t AlignInBits,
10141026 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,
10161029 ArrayRef<Metadata *> Ops)
10171030 : 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) {}
10201033 ~DIDerivedType () = default ;
10211034 static DIDerivedType *
10221035 getImpl (LLVMContext &Context, unsigned Tag, StringRef Name, DIFile *File,
@@ -1157,39 +1170,43 @@ class DICompositeType : public DIType {
11571170
11581171 DICompositeType (LLVMContext &C, StorageType Storage, unsigned Tag,
11591172 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,
11611175 ArrayRef<Metadata *> Ops)
11621176 : DIType(C, DICompositeTypeKind, Storage, Tag, Line, SizeInBits,
1163- AlignInBits, OffsetInBits, Flags, Ops),
1177+ AlignInBits, OffsetInBits, NumExtraInhabitants, Flags, Ops),
11641178 RuntimeLang (RuntimeLang) {}
11651179 ~DICompositeType () = default ;
11661180
11671181 // / Change fields in place.
11681182 void mutate (unsigned Tag, unsigned Line, unsigned RuntimeLang,
11691183 uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
1170- DIFlags Flags) {
1184+ uint32_t NumExtraInhabitants, DIFlags Flags) {
11711185 assert (isDistinct () && " Only distinct nodes can mutate" );
11721186 assert (getRawIdentifier () && " Only ODR-uniqued nodes should mutate" );
11731187 this ->RuntimeLang = RuntimeLang;
1174- DIType::mutate (Tag, Line, SizeInBits, AlignInBits, OffsetInBits, Flags);
1188+ DIType::mutate (Tag, Line, SizeInBits, AlignInBits, OffsetInBits,
1189+ NumExtraInhabitants, Flags);
11751190 }
11761191
11771192 static DICompositeType *
11781193 getImpl (LLVMContext &Context, unsigned Tag, StringRef Name, Metadata *File,
11791194 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,
11821198 DITemplateParameterArray TemplateParams, StringRef Identifier,
11831199 DIDerivedType *Discriminator, Metadata *DataLocation,
11841200 Metadata *Associated, Metadata *Allocated, Metadata *Rank,
11851201 DINodeArray Annotations, StorageType Storage,
11861202 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);
11931210 }
11941211 static DICompositeType *
11951212 getImpl (LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File,
@@ -1199,7 +1216,8 @@ class DICompositeType : public DIType {
11991216 Metadata *VTableHolder, Metadata *TemplateParams,
12001217 MDString *Identifier, Metadata *Discriminator, Metadata *DataLocation,
12011218 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 );
12031221
12041222 TempDICompositeType cloneImpl () const {
12051223 return getTemporary (
@@ -1208,7 +1226,7 @@ class DICompositeType : public DIType {
12081226 getFlags (), getElements (), getRuntimeLang (), getVTableHolder (),
12091227 getTemplateParams (), getIdentifier (), getDiscriminator (),
12101228 getRawDataLocation (), getRawAssociated (), getRawAllocated (),
1211- getRawRank (), getAnnotations ());
1229+ getRawRank (), getAnnotations (), getNumExtraInhabitants () );
12121230 }
12131231
12141232public:
@@ -1222,11 +1240,11 @@ class DICompositeType : public DIType {
12221240 StringRef Identifier = " " , DIDerivedType *Discriminator = nullptr ,
12231241 Metadata *DataLocation = nullptr , Metadata *Associated = nullptr ,
12241242 Metadata *Allocated = nullptr , Metadata *Rank = nullptr ,
1225- DINodeArray Annotations = nullptr ),
1243+ DINodeArray Annotations = nullptr , uint32_t NumExtraInhabitants = 0 ),
12261244 (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))
12301248 DEFINE_MDNODE_GET(
12311249 DICompositeType,
12321250 (unsigned Tag, MDString *Name, Metadata *File, unsigned Line,
@@ -1236,11 +1254,12 @@ class DICompositeType : public DIType {
12361254 Metadata *TemplateParams = nullptr , MDString *Identifier = nullptr ,
12371255 Metadata *Discriminator = nullptr , Metadata *DataLocation = nullptr ,
12381256 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 ),
12401259 (Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
12411260 OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams,
12421261 Identifier, Discriminator, DataLocation, Associated, Allocated, Rank,
1243- Annotations))
1262+ Annotations, NumExtraInhabitants ))
12441263
12451264 TempDICompositeType clone() const { return cloneImpl (); }
12461265
@@ -1255,8 +1274,8 @@ class DICompositeType : public DIType {
12551274 getODRType (LLVMContext &Context, MDString &Identifier, unsigned Tag,
12561275 MDString *Name, Metadata *File, unsigned Line, Metadata *Scope,
12571276 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,
12601279 Metadata *TemplateParams, Metadata *Discriminator,
12611280 Metadata *DataLocation, Metadata *Associated, Metadata *Allocated,
12621281 Metadata *Rank, Metadata *Annotations);
@@ -1272,15 +1291,14 @@ class DICompositeType : public DIType {
12721291 // /
12731292 // / If not \a LLVMContext::isODRUniquingDebugTypes(), this function returns
12741293 // / 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);
12841302
12851303 DIType *getBaseType () const { return cast_or_null<DIType>(getRawBaseType ()); }
12861304 DINodeArray getElements () const {
0 commit comments