diff options
Diffstat (limited to 'llvm/lib/Bitcode/Reader/MetadataLoader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/MetadataLoader.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp index 0cf547c..8493eb7 100644 --- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp +++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp @@ -2078,8 +2078,15 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( case bitc::METADATA_ARG_LIST: { SmallVector<ValueAsMetadata *, 4> Elts; Elts.reserve(Record.size()); - for (uint64_t Elt : Record) - Elts.push_back(dyn_cast_or_null<ValueAsMetadata>(getMDOrNull(Elt))); + for (uint64_t Elt : Record) { + Metadata *MD = getMD(Elt); + if (isa<MDNode>(MD) && cast<MDNode>(MD)->isTemporary()) + return error( + "Invalid record: DIArgList should not contain forward refs"); + if (!isa<ValueAsMetadata>(MD)) + return error("Invalid record"); + Elts.push_back(cast<ValueAsMetadata>(MD)); + } MetadataList.assignValue(DIArgList::get(Context, Elts), NextMetadataNo); NextMetadataNo++; |