diff options
Diffstat (limited to 'llvm/lib/Bitcode/Reader/MetadataLoader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/MetadataLoader.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp index 15e2386b..4151e02 100644 --- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp +++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp @@ -554,7 +554,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(); @@ -628,6 +628,9 @@ class MetadataLoader::MetadataLoaderImpl { LLVM_FALLTHROUGH; } case 3: + IsDistinct = false; + LLVM_FALLTHROUGH; + case 4: // Up-to-date! break; } @@ -2002,11 +2005,13 @@ 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; - MetadataList.assignValue( - GET_OR_DISTINCT(DIExpression, (Context, Elts)), NextMetadataNo); + if (IsDistinct) + return error("Invalid record"); + + MetadataList.assignValue(DIExpression::get(Context, Elts), NextMetadataNo); NextMetadataNo++; break; } |