aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
-rw-r--r--llvm/lib/Bitcode/Reader/BitcodeReader.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
index a8b5f96..e09532dc 100644
--- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -5471,9 +5471,6 @@ Error BitcodeReader::parseFunctionBody(Function *F) {
if (IsFP && Record.size() > OpNum+1)
FMF = getDecodedFastMathFlags(Record[++OpNum]);
- if (OpNum+1 != Record.size())
- return error("Invalid record");
-
if (IsFP) {
if (!CmpInst::isFPPredicate(PredVal))
return error("Invalid fcmp predicate");
@@ -5482,8 +5479,14 @@ Error BitcodeReader::parseFunctionBody(Function *F) {
if (!CmpInst::isIntPredicate(PredVal))
return error("Invalid icmp predicate");
I = new ICmpInst(PredVal, LHS, RHS);
+ if (Record.size() > OpNum + 1 &&
+ (Record[++OpNum] & (1 << bitc::ICMP_SAME_SIGN)))
+ cast<ICmpInst>(I)->setSameSign();
}
+ if (OpNum + 1 != Record.size())
+ return error("Invalid record");
+
ResTypeID = getVirtualTypeID(I->getType()->getScalarType());
if (LHS->getType()->isVectorTy())
ResTypeID = getVirtualTypeID(I->getType(), ResTypeID);