diff options
author | John McCall <rjmccall@apple.com> | 2010-08-05 18:11:10 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-08-05 18:11:10 +0000 |
commit | 95bde46bbb8308c625d4d7f679b773376a51302b (patch) | |
tree | 4682819c191c1fa3c3e193f71fcc9eed73749729 | |
parent | 16ba7c652e76acc0beea8a87bee912dc93413a6b (diff) | |
download | bcm5719-llvm-95bde46bbb8308c625d4d7f679b773376a51302b.tar.gz bcm5719-llvm-95bde46bbb8308c625d4d7f679b773376a51302b.zip |
Argument evaluation order is not guaranteed. Split these out to force an order.
llvm-svn: 110354
-rw-r--r-- | clang/lib/CodeGen/CGExprScalar.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index 8d28b2485f2..08d340ef7b5 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -1576,12 +1576,13 @@ Value *ScalarExprEmitter::EmitOverflowCheckedBinOp(const BinOpInfo &Ops) { llvm::PointerType::getUnqual(handlerTy)); handlerFunction = Builder.CreateLoad(handlerFunction); - llvm::Value *handlerResult = Builder.CreateCall4(handlerFunction, - Builder.CreateSExt(Ops.LHS, CGF.Int64Ty), - Builder.CreateSExt(Ops.RHS, CGF.Int64Ty), - llvm::ConstantInt::get(llvm::Type::getInt8Ty(VMContext), OpID), - llvm::ConstantInt::get(llvm::Type::getInt8Ty(VMContext), - cast<llvm::IntegerType>(opTy)->getBitWidth())); + llvm::Value *lhs = Builder.CreateSExt(Ops.LHS, CGF.Int64Ty); + llvm::Value *rhs = Builder.CreateSExt(Ops.RHS, CGF.Int64Ty); + + llvm::Value *handlerResult = + Builder.CreateCall4(handlerFunction, lhs, rhs, + Builder.getInt8(OpID), + Builder.getInt8(cast<llvm::IntegerType>(opTy)->getBitWidth())); handlerResult = Builder.CreateTrunc(handlerResult, opTy); |