diff options
Diffstat (limited to 'llvm/lib/Bitcode/Reader/MetadataLoader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/MetadataLoader.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp index 641cd1b..e124354 100644 --- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp +++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp @@ -473,7 +473,8 @@ class MetadataLoader::MetadataLoaderImpl { Error parseOneMetadata(SmallVectorImpl<uint64_t> &Record, unsigned Code, PlaceholderQueue &Placeholders, StringRef Blob, - unsigned &NextMetadataNo); + unsigned &NextMetadataNo, + BasicBlock *ConstExprInsertBB); Error parseMetadataStrings(ArrayRef<uint64_t> Record, StringRef Blob, function_ref<void(StringRef)> CallBack); Error parseGlobalObjectAttachment(GlobalObject &GO, @@ -742,7 +743,7 @@ public: TheModule(TheModule), Callbacks(std::move(Callbacks)), IsImporting(IsImporting) {} - Error parseMetadata(bool ModuleLevel); + Error parseMetadata(bool ModuleLevel, BasicBlock *ConstExprInsertBB); bool hasFwdRefs() const { return MetadataList.hasFwdRefs(); } @@ -1067,7 +1068,8 @@ void MetadataLoader::MetadataLoaderImpl::callMDTypeCallback(Metadata **Val, /// Parse a METADATA_BLOCK. If ModuleLevel is true then we are parsing /// module level metadata. -Error MetadataLoader::MetadataLoaderImpl::parseMetadata(bool ModuleLevel) { +Error MetadataLoader::MetadataLoaderImpl::parseMetadata( + bool ModuleLevel, BasicBlock *ConstExprInsertBB) { if (!ModuleLevel && MetadataList.hasFwdRefs()) return error("Invalid metadata: fwd refs into function blocks"); @@ -1150,7 +1152,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseMetadata(bool ModuleLevel) { if (Expected<unsigned> MaybeCode = Stream.readRecord(Entry.ID, Record, &Blob)) { if (Error Err = parseOneMetadata(Record, MaybeCode.get(), Placeholders, - Blob, NextMetadataNo)) + Blob, NextMetadataNo, ConstExprInsertBB)) return Err; } else return MaybeCode.takeError(); @@ -1191,7 +1193,8 @@ void MetadataLoader::MetadataLoaderImpl::lazyLoadOneMetadata( if (Expected<unsigned> MaybeCode = IndexCursor.readRecord(Entry.ID, Record, &Blob)) { if (Error Err = - parseOneMetadata(Record, MaybeCode.get(), Placeholders, Blob, ID)) + parseOneMetadata(Record, MaybeCode.get(), Placeholders, Blob, ID, + /* ConstExprInsertBB */ nullptr)) report_fatal_error("Can't lazyload MD, parseOneMetadata: " + Twine(toString(std::move(Err)))); } else @@ -1235,7 +1238,8 @@ void MetadataLoader::MetadataLoaderImpl::resolveForwardRefsAndPlaceholders( Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( SmallVectorImpl<uint64_t> &Record, unsigned Code, - PlaceholderQueue &Placeholders, StringRef Blob, unsigned &NextMetadataNo) { + PlaceholderQueue &Placeholders, StringRef Blob, unsigned &NextMetadataNo, + BasicBlock *ConstExprInsertBB) { bool IsDistinct = false; auto getMD = [&](unsigned ID) -> Metadata * { @@ -1389,8 +1393,7 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( if (!Ty || Ty->isMetadataTy() || Ty->isVoidTy()) return error("Invalid record"); - Value *V = ValueList.getValueFwdRef(Record[1], Ty, TyID, - /*ConstExprInsertBB*/ nullptr); + Value *V = ValueList.getValueFwdRef(Record[1], Ty, TyID, ConstExprInsertBB); if (!V) return error("Invalid value reference from metadata"); @@ -2479,8 +2482,9 @@ MetadataLoader::MetadataLoader(BitstreamCursor &Stream, Module &TheModule, : Pimpl(std::make_unique<MetadataLoaderImpl>( Stream, TheModule, ValueList, std::move(Callbacks), IsImporting)) {} -Error MetadataLoader::parseMetadata(bool ModuleLevel) { - return Pimpl->parseMetadata(ModuleLevel); +Error MetadataLoader::parseMetadata(bool ModuleLevel, + BasicBlock *ConstExprInsertBB) { + return Pimpl->parseMetadata(ModuleLevel, ConstExprInsertBB); } bool MetadataLoader::hasFwdRefs() const { return Pimpl->hasFwdRefs(); } |