diff options
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index ea655f9..7d23f3b 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -5143,6 +5143,10 @@ Error BitcodeReader::parseFunctionBody(Function *F) { ? AtomicCmpXchgInst::getStrongestFailureOrdering(SuccessOrdering) : getDecodedOrdering(Record[OpNum + 3]); + if (FailureOrdering == AtomicOrdering::NotAtomic || + FailureOrdering == AtomicOrdering::Unordered) + return error("Invalid record"); + const Align Alignment( TheModule->getDataLayout().getTypeStoreSize(Cmp->getType())); @@ -5192,9 +5196,8 @@ Error BitcodeReader::parseFunctionBody(Function *F) { const AtomicOrdering SuccessOrdering = getDecodedOrdering(Record[OpNum + 1]); - if (SuccessOrdering == AtomicOrdering::NotAtomic || - SuccessOrdering == AtomicOrdering::Unordered) - return error("Invalid record"); + if (!AtomicCmpXchgInst::isValidSuccessOrdering(SuccessOrdering)) + return error("Invalid cmpxchg success ordering"); const SyncScope::ID SSID = getDecodedSyncScopeID(Record[OpNum + 2]); @@ -5203,6 +5206,8 @@ Error BitcodeReader::parseFunctionBody(Function *F) { const AtomicOrdering FailureOrdering = getDecodedOrdering(Record[OpNum + 3]); + if (!AtomicCmpXchgInst::isValidFailureOrdering(FailureOrdering)) + return error("Invalid cmpxchg failure ordering"); const bool IsWeak = Record[OpNum + 4]; |