diff options
Diffstat (limited to 'llvm/lib/Bitcode/Reader/MetadataLoader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/MetadataLoader.cpp | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp index 1caa848..413d9f68e 100644 --- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp +++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp @@ -1600,7 +1600,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( break; } case bitc::METADATA_COMPOSITE_TYPE: { - if (Record.size() < 16 || Record.size() > 24) + if (Record.size() < 16 || Record.size() > 25) return error("Invalid record"); // If we have a UUID and this is not a forward declaration, lookup the @@ -1622,6 +1622,8 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[10]); Metadata *Elements = nullptr; unsigned RuntimeLang = Record[12]; + std::optional<uint32_t> EnumKind; + Metadata *VTableHolder = nullptr; Metadata *TemplateParams = nullptr; Metadata *Discriminator = nullptr; @@ -1683,24 +1685,28 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( Specification = getMDOrNull(Record[23]); } } + + if (Record.size() > 25 && Record[25] != dwarf::DW_APPLE_ENUM_KIND_invalid) + EnumKind = Record[25]; + DICompositeType *CT = nullptr; if (Identifier) CT = DICompositeType::buildODRType( Context, *Identifier, Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits, Specification, - NumExtraInhabitants, Flags, Elements, RuntimeLang, VTableHolder, - TemplateParams, Discriminator, DataLocation, Associated, Allocated, - Rank, Annotations); + NumExtraInhabitants, Flags, Elements, RuntimeLang, EnumKind, + VTableHolder, TemplateParams, Discriminator, DataLocation, Associated, + Allocated, Rank, Annotations); // Create a node if we didn't get a lazy ODR type. if (!CT) CT = GET_OR_DISTINCT(DICompositeType, (Context, Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits, Flags, - Elements, RuntimeLang, VTableHolder, TemplateParams, - Identifier, Discriminator, DataLocation, Associated, - Allocated, Rank, Annotations, Specification, - NumExtraInhabitants)); + Elements, RuntimeLang, EnumKind, VTableHolder, + TemplateParams, Identifier, Discriminator, + DataLocation, Associated, Allocated, Rank, + Annotations, Specification, NumExtraInhabitants)); if (!IsNotUsedInTypeRef && Identifier) MetadataList.addTypeRef(*Identifier, *cast<DICompositeType>(CT)); |