From 3bd94d6d1e8879f072f92e341f2c557ac91ab853 Mon Sep 17 00:00:00 2001 From: John McCall Date: Thu, 5 Aug 2010 18:11:10 +0000 Subject: [PATCH] Argument evaluation order is not guaranteed. Split these out to force an order. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@110354 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGExprScalar.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index 8d28b2485f..08d340ef7b 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/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(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(opTy)->getBitWidth())); handlerResult = Builder.CreateTrunc(handlerResult, opTy); -- 2.40.0