aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Bitcode/Reader/MetadataLoader.cpp')
-rw-r--r--llvm/lib/Bitcode/Reader/MetadataLoader.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
index 8493eb7..a2ad4a4 100644
--- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
+++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp
@@ -555,7 +555,7 @@ class MetadataLoader::MetadataLoaderImpl {
}
/// Upgrade the expression from previous versions.
- Error upgradeDIExpression(uint64_t FromVersion,
+ Error upgradeDIExpression(uint64_t FromVersion, bool &IsDistinct,
MutableArrayRef<uint64_t> &Expr,
SmallVectorImpl<uint64_t> &Buffer) {
auto N = Expr.size();
@@ -629,6 +629,9 @@ class MetadataLoader::MetadataLoaderImpl {
LLVM_FALLTHROUGH;
}
case 3:
+ IsDistinct = false;
+ LLVM_FALLTHROUGH;
+ case 4:
// Up-to-date!
break;
}
@@ -1981,9 +1984,12 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
auto Elts = MutableArrayRef<uint64_t>(Record).slice(1);
SmallVector<uint64_t, 6> Buffer;
- if (Error Err = upgradeDIExpression(Version, Elts, Buffer))
+ if (Error Err = upgradeDIExpression(Version, IsDistinct, Elts, Buffer))
return Err;
+ if (IsDistinct)
+ return error("Invalid record");
+
MetadataList.assignValue(
GET_OR_DISTINCT(DIExpression, (Context, Elts)), NextMetadataNo);
NextMetadataNo++;