diff options
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 |
