@@ -712,31 +712,38 @@ 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,
742+ uint32_t NumExtraInhabitants, DIFlags Flags) {
737743 assert (isDistinct () && " Only distinct nodes can mutate" );
738744 setTag (Tag);
739- init (Line, SizeInBits, AlignInBits, OffsetInBits, Flags);
745+ init (Line, SizeInBits, AlignInBits, OffsetInBits, NumExtraInhabitants,
746+ Flags);
740747 }
741748
742749public:
@@ -749,6 +756,7 @@ class DIType : public DIScope {
749756 uint32_t getAlignInBits () const ;
750757 uint32_t getAlignInBytes () const { return getAlignInBits () / CHAR_BIT; }
751758 uint64_t getOffsetInBits () const { return OffsetInBits; }
759+ uint32_t getNumExtraInhabitants () const { return NumExtraInhabitants; }
752760 DIFlags getFlags () const { return Flags; }
753761
754762 DIScope *getScope () const { return cast_or_null<DIScope>(getRawScope ()); }
@@ -820,49 +828,55 @@ class DIBasicType : public DIType {
820828
821829 DIBasicType (LLVMContext &C, StorageType Storage, unsigned Tag,
822830 uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding,
823- DIFlags Flags, ArrayRef<Metadata *> Ops)
831+ uint32_t NumExtraInhabitants, DIFlags Flags,
832+ ArrayRef<Metadata *> Ops)
824833 : DIType(C, DIBasicTypeKind, Storage, Tag, 0 , SizeInBits, AlignInBits, 0 ,
825- Flags, Ops),
834+ NumExtraInhabitants, Flags, Ops),
826835 Encoding (Encoding) {}
827836 ~DIBasicType () = default ;
828837
829838 static DIBasicType *getImpl (LLVMContext &Context, unsigned Tag,
830839 StringRef Name, uint64_t SizeInBits,
831840 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 ) {
834843 return getImpl (Context, Tag, getCanonicalMDString (Context, Name),
835- SizeInBits, AlignInBits, Encoding, Flags, Storage ,
836- ShouldCreate);
844+ SizeInBits, AlignInBits, Encoding, NumExtraInhabitants ,
845+ Flags, Storage, ShouldCreate);
837846 }
838847 static DIBasicType *getImpl (LLVMContext &Context, unsigned Tag,
839848 MDString *Name, uint64_t SizeInBits,
840849 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 );
843852
844853 TempDIBasicType cloneImpl () const {
845854 return getTemporary (getContext (), getTag (), getName (), getSizeInBits (),
846- getAlignInBits (), getEncoding (), getFlags ());
855+ getAlignInBits (), getEncoding (),
856+ getNumExtraInhabitants (), getFlags ());
847857 }
848858
849859public:
850860 DEFINE_MDNODE_GET (DIBasicType, (unsigned Tag, StringRef Name),
851- (Tag, Name, 0 , 0 , 0 , FlagZero))
861+ (Tag, Name, 0 , 0 , 0 , 0 , FlagZero))
852862 DEFINE_MDNODE_GET(DIBasicType,
853863 (unsigned Tag, StringRef Name, uint64_t SizeInBits),
854- (Tag, Name, SizeInBits, 0 , 0 , FlagZero))
864+ (Tag, Name, SizeInBits, 0 , 0 , 0 , FlagZero))
855865 DEFINE_MDNODE_GET(DIBasicType,
856866 (unsigned Tag, MDString *Name, uint64_t SizeInBits),
857- (Tag, Name, SizeInBits, 0 , 0 , FlagZero))
867+ (Tag, Name, SizeInBits, 0 , 0 , 0 , FlagZero))
858868 DEFINE_MDNODE_GET(DIBasicType,
859869 (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))
862874 DEFINE_MDNODE_GET(DIBasicType,
863875 (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))
866880
867881 TempDIBasicType clone() const { return cloneImpl (); }
868882
@@ -890,7 +904,7 @@ class DIStringType : public DIType {
890904 uint64_t SizeInBits, uint32_t AlignInBits, unsigned Encoding,
891905 ArrayRef<Metadata *> Ops)
892906 : DIType(C, DIStringTypeKind, Storage, Tag, 0 , SizeInBits, AlignInBits, 0 ,
893- FlagZero, Ops),
907+ 0 , FlagZero, Ops),
894908 Encoding (Encoding) {}
895909 ~DIStringType () = default ;
896910
@@ -1016,7 +1030,7 @@ class DIDerivedType : public DIType {
10161030 std::optional<PtrAuthData> PtrAuthData, DIFlags Flags,
10171031 ArrayRef<Metadata *> Ops)
10181032 : DIType(C, DIDerivedTypeKind, Storage, Tag, Line, SizeInBits,
1019- AlignInBits, OffsetInBits, Flags, Ops),
1033+ AlignInBits, OffsetInBits, 0 , Flags, Ops),
10201034 DWARFAddressSpace (DWARFAddressSpace) {
10211035 if (PtrAuthData)
10221036 SubclassData32 = PtrAuthData->RawData ;
@@ -1157,39 +1171,43 @@ class DICompositeType : public DIType {
11571171
11581172 DICompositeType (LLVMContext &C, StorageType Storage, unsigned Tag,
11591173 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,
11611176 ArrayRef<Metadata *> Ops)
11621177 : DIType(C, DICompositeTypeKind, Storage, Tag, Line, SizeInBits,
1163- AlignInBits, OffsetInBits, Flags, Ops),
1178+ AlignInBits, OffsetInBits, NumExtraInhabitants, Flags, Ops),
11641179 RuntimeLang (RuntimeLang) {}
11651180 ~DICompositeType () = default ;
11661181
11671182 // / Change fields in place.
11681183 void mutate (unsigned Tag, unsigned Line, unsigned RuntimeLang,
11691184 uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
1170- DIFlags Flags) {
1185+ uint32_t NumExtraInhabitants, DIFlags Flags) {
11711186 assert (isDistinct () && " Only distinct nodes can mutate" );
11721187 assert (getRawIdentifier () && " Only ODR-uniqued nodes should mutate" );
11731188 this ->RuntimeLang = RuntimeLang;
1174- DIType::mutate (Tag, Line, SizeInBits, AlignInBits, OffsetInBits, Flags);
1189+ DIType::mutate (Tag, Line, SizeInBits, AlignInBits, OffsetInBits,
1190+ NumExtraInhabitants, Flags);
11751191 }
11761192
11771193 static DICompositeType *
11781194 getImpl (LLVMContext &Context, unsigned Tag, StringRef Name, Metadata *File,
11791195 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,
11821199 DITemplateParameterArray TemplateParams, StringRef Identifier,
11831200 DIDerivedType *Discriminator, Metadata *DataLocation,
11841201 Metadata *Associated, Metadata *Allocated, Metadata *Rank,
11851202 DINodeArray Annotations, StorageType Storage,
11861203 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);
11931211 }
11941212 static DICompositeType *
11951213 getImpl (LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File,
@@ -1199,7 +1217,8 @@ class DICompositeType : public DIType {
11991217 Metadata *VTableHolder, Metadata *TemplateParams,
12001218 MDString *Identifier, Metadata *Discriminator, Metadata *DataLocation,
12011219 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 );
12031222
12041223 TempDICompositeType cloneImpl () const {
12051224 return getTemporary (
@@ -1208,7 +1227,7 @@ class DICompositeType : public DIType {
12081227 getFlags (), getElements (), getRuntimeLang (), getVTableHolder (),
12091228 getTemplateParams (), getIdentifier (), getDiscriminator (),
12101229 getRawDataLocation (), getRawAssociated (), getRawAllocated (),
1211- getRawRank (), getAnnotations ());
1230+ getRawRank (), getAnnotations (), getNumExtraInhabitants () );
12121231 }
12131232
12141233public:
@@ -1222,11 +1241,11 @@ class DICompositeType : public DIType {
12221241 StringRef Identifier = " " , DIDerivedType *Discriminator = nullptr ,
12231242 Metadata *DataLocation = nullptr , Metadata *Associated = nullptr ,
12241243 Metadata *Allocated = nullptr , Metadata *Rank = nullptr ,
1225- DINodeArray Annotations = nullptr ),
1244+ DINodeArray Annotations = nullptr , uint32_t NumExtraInhabitants = 0 ),
12261245 (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))
12301249 DEFINE_MDNODE_GET(
12311250 DICompositeType,
12321251 (unsigned Tag, MDString *Name, Metadata *File, unsigned Line,
@@ -1236,11 +1255,12 @@ class DICompositeType : public DIType {
12361255 Metadata *TemplateParams = nullptr , MDString *Identifier = nullptr ,
12371256 Metadata *Discriminator = nullptr , Metadata *DataLocation = nullptr ,
12381257 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 ),
12401260 (Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
12411261 OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams,
12421262 Identifier, Discriminator, DataLocation, Associated, Allocated, Rank,
1243- Annotations))
1263+ Annotations, NumExtraInhabitants ))
12441264
12451265 TempDICompositeType clone() const { return cloneImpl (); }
12461266
@@ -1255,8 +1275,8 @@ class DICompositeType : public DIType {
12551275 getODRType (LLVMContext &Context, MDString &Identifier, unsigned Tag,
12561276 MDString *Name, Metadata *File, unsigned Line, Metadata *Scope,
12571277 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,
12601280 Metadata *TemplateParams, Metadata *Discriminator,
12611281 Metadata *DataLocation, Metadata *Associated, Metadata *Allocated,
12621282 Metadata *Rank, Metadata *Annotations);
@@ -1272,15 +1292,14 @@ class DICompositeType : public DIType {
12721292 // /
12731293 // / If not \a LLVMContext::isODRUniquingDebugTypes(), this function returns
12741294 // / 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);
12841303
12851304 DIType *getBaseType () const { return cast_or_null<DIType>(getRawBaseType ()); }
12861305 DINodeArray getElements () const {
0 commit comments