diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2021-07-29 20:15:26 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2021-07-29 20:15:26 +0000 |
| commit | 344a3780b2e33f6ca763666c380202b18aab72a3 (patch) | |
| tree | f0b203ee6eb71d7fdd792373e3c81eb18d6934dd /llvm/lib/Bitcode/Reader/MetadataLoader.cpp | |
| parent | b60736ec1405bb0a8dd40989f67ef4c93da068ab (diff) | |
vendor/llvm-project/llvmorg-13-init-16847-g88e66fa60ae5vendor/llvm-project/llvmorg-12.0.1-rc2-0-ge7dac564cd0evendor/llvm-project/llvmorg-12.0.1-0-gfed41342a82f
Diffstat (limited to 'llvm/lib/Bitcode/Reader/MetadataLoader.cpp')
| -rw-r--r-- | llvm/lib/Bitcode/Reader/MetadataLoader.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp index 8cdda62870ff..8493eb7a28b2 100644 --- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp +++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp @@ -550,8 +550,7 @@ class MetadataLoader::MetadataLoaderImpl { SmallVector<uint64_t, 8> Ops; Ops.append(std::next(DIExpr->elements_begin()), DIExpr->elements_end()); - auto *E = DIExpression::get(Context, Ops); - DDI->setOperand(2, MetadataAsValue::get(Context, E)); + DDI->setExpression(DIExpression::get(Context, Ops)); } } @@ -2076,6 +2075,23 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( return Err; break; } + case bitc::METADATA_ARG_LIST: { + SmallVector<ValueAsMetadata *, 4> Elts; + Elts.reserve(Record.size()); + 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++; + break; + } } return Error::success(); #undef GET_OR_DISTINCT |
