@@ -1201,7 +1201,7 @@ class DICompositeType : public DIType {
12011201 static DICompositeType *
12021202 getImpl (LLVMContext &Context, unsigned Tag, StringRef Name, Metadata *File,
12031203 unsigned Line, DIScope *Scope, DIType *BaseType, uint64_t SizeInBits,
1204- uint32_t AlignInBits, uint64_t OffsetInBits,
1204+ uint32_t AlignInBits, uint64_t OffsetInBits, DIType *SpecificationOf,
12051205 uint32_t NumExtraInhabitants, DIFlags Flags, DINodeArray Elements,
12061206 unsigned RuntimeLang, DIType *VTableHolder,
12071207 DITemplateParameterArray TemplateParams, StringRef Identifier,
@@ -1215,7 +1215,7 @@ class DICompositeType : public DIType {
12151215 TemplateParams.get (),
12161216 getCanonicalMDString (Context, Identifier), Discriminator,
12171217 DataLocation, Associated, Allocated, Rank, Annotations.get (),
1218- NumExtraInhabitants, Storage, ShouldCreate);
1218+ SpecificationOf, NumExtraInhabitants, Storage, ShouldCreate);
12191219 }
12201220 static DICompositeType *
12211221 getImpl (LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File,
@@ -1225,8 +1225,9 @@ class DICompositeType : public DIType {
12251225 Metadata *VTableHolder, Metadata *TemplateParams,
12261226 MDString *Identifier, Metadata *Discriminator, Metadata *DataLocation,
12271227 Metadata *Associated, Metadata *Allocated, Metadata *Rank,
1228- Metadata *Annotations, uint32_t NumExtraInhabitants,
1229- StorageType Storage, bool ShouldCreate = true );
1228+ Metadata *Annotations, Metadata *SpecificationOf,
1229+ uint32_t NumExtraInhabitants, StorageType Storage,
1230+ bool ShouldCreate = true );
12301231
12311232 TempDICompositeType cloneImpl () const {
12321233 return getTemporary (
@@ -1235,7 +1236,8 @@ class DICompositeType : public DIType {
12351236 getFlags (), getElements (), getRuntimeLang (), getVTableHolder (),
12361237 getTemplateParams (), getIdentifier (), getDiscriminator (),
12371238 getRawDataLocation (), getRawAssociated (), getRawAllocated (),
1238- getRawRank (), getAnnotations (), getNumExtraInhabitants ());
1239+ getRawRank (), getAnnotations (), getSpecificationOf (),
1240+ getNumExtraInhabitants ());
12391241 }
12401242
12411243public:
@@ -1249,11 +1251,12 @@ class DICompositeType : public DIType {
12491251 StringRef Identifier = " " , DIDerivedType *Discriminator = nullptr ,
12501252 Metadata *DataLocation = nullptr , Metadata *Associated = nullptr ,
12511253 Metadata *Allocated = nullptr , Metadata *Rank = nullptr ,
1252- DINodeArray Annotations = nullptr , uint32_t NumExtraInhabitants = 0 ),
1254+ DINodeArray Annotations = nullptr , DIType *SpecificationOf = nullptr ,
1255+ uint32_t NumExtraInhabitants = 0 ),
12531256 (Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
1254- OffsetInBits, NumExtraInhabitants, Flags, Elements, RuntimeLang ,
1255- VTableHolder, TemplateParams, Identifier, Discriminator, DataLocation ,
1256- Associated, Allocated, Rank, Annotations))
1257+ OffsetInBits, SpecificationOf, NumExtraInhabitants, Flags, Elements,
1258+ RuntimeLang, VTableHolder, TemplateParams, Identifier, Discriminator,
1259+ DataLocation, Associated, Allocated, Rank, Annotations))
12571260 DEFINE_MDNODE_GET(
12581261 DICompositeType,
12591262 (unsigned Tag, MDString *Name, Metadata *File, unsigned Line,
@@ -1264,11 +1267,11 @@ class DICompositeType : public DIType {
12641267 Metadata *Discriminator = nullptr , Metadata *DataLocation = nullptr ,
12651268 Metadata *Associated = nullptr , Metadata *Allocated = nullptr ,
12661269 Metadata *Rank = nullptr , Metadata *Annotations = nullptr ,
1267- uint32_t NumExtraInhabitants = 0 ),
1270+ Metadata *SpecificationOf = nullptr , uint32_t NumExtraInhabitants = 0 ),
12681271 (Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
12691272 OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams,
12701273 Identifier, Discriminator, DataLocation, Associated, Allocated, Rank,
1271- Annotations, NumExtraInhabitants))
1274+ Annotations, SpecificationOf, NumExtraInhabitants))
12721275
12731276 TempDICompositeType clone() const { return cloneImpl (); }
12741277
@@ -1283,8 +1286,9 @@ class DICompositeType : public DIType {
12831286 getODRType (LLVMContext &Context, MDString &Identifier, unsigned Tag,
12841287 MDString *Name, Metadata *File, unsigned Line, Metadata *Scope,
12851288 Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
1286- uint64_t OffsetInBits, uint32_t NumExtraInhabitants, DIFlags Flags,
1287- Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder,
1289+ uint64_t OffsetInBits, Metadata *SpecificationOf,
1290+ uint32_t NumExtraInhabitants, DIFlags Flags, Metadata *Elements,
1291+ unsigned RuntimeLang, Metadata *VTableHolder,
12881292 Metadata *TemplateParams, Metadata *Discriminator,
12891293 Metadata *DataLocation, Metadata *Associated, Metadata *Allocated,
12901294 Metadata *Rank, Metadata *Annotations);
@@ -1300,14 +1304,16 @@ class DICompositeType : public DIType {
13001304 // /
13011305 // / If not \a LLVMContext::isODRUniquingDebugTypes(), this function returns
13021306 // / nullptr.
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);
1307+ static DICompositeType *
1308+ buildODRType (LLVMContext &Context, MDString &Identifier, unsigned Tag,
1309+ MDString *Name, Metadata *File, unsigned Line, Metadata *Scope,
1310+ Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
1311+ uint64_t OffsetInBits, Metadata *SpecificationOf,
1312+ uint32_t NumExtraInhabitants, DIFlags Flags, Metadata *Elements,
1313+ unsigned RuntimeLang, Metadata *VTableHolder,
1314+ Metadata *TemplateParams, Metadata *Discriminator,
1315+ Metadata *DataLocation, Metadata *Associated,
1316+ Metadata *Allocated, Metadata *Rank, Metadata *Annotations);
13111317
13121318 DIType *getBaseType () const { return cast_or_null<DIType>(getRawBaseType ()); }
13131319 DINodeArray getElements () const {
@@ -1367,6 +1373,10 @@ class DICompositeType : public DIType {
13671373 return cast_or_null<MDTuple>(getRawAnnotations ());
13681374 }
13691375
1376+ Metadata *getRawSpecificationOf () const { return getOperand (14 ); }
1377+ DIType *getSpecificationOf () const {
1378+ return cast_or_null<DIType>(getRawSpecificationOf ());
1379+ }
13701380 // / Replace operands.
13711381 // /
13721382 // / If this \a isUniqued() and not \a isResolved(), on a uniquing collision
0 commit comments