diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-08-25 18:44:25 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-08-25 18:44:25 +0000 |
commit | ff4264dae31cf42807b64ecc114906b0b835690a (patch) | |
tree | 30d7af74b21dcbddfd278996a74cb541bf88183f /lib/Analysis/GRExprEngine.cpp | |
parent | 91cf4199cca311ea9c3b3a4e2b3984d508c9e5e3 (diff) |
Move logic of GRExprEngine::EvalBinOp to SValuator::EvalBinOp.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80018 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/GRExprEngine.cpp')
-rw-r--r-- | lib/Analysis/GRExprEngine.cpp | 42 |
1 files changed, 5 insertions, 37 deletions
diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp index cfb914842f..3abaf552d8 100644 --- a/lib/Analysis/GRExprEngine.cpp +++ b/lib/Analysis/GRExprEngine.cpp @@ -1354,9 +1354,11 @@ static bool EvalOSAtomicCompareAndSwap(ExplodedNodeSet& Dst, if (theValueVal.isUndef() || oldValueVal.isUndef()) { return false; } + + SValuator &SVator = Engine.getSValuator(); // Perform the comparison. - SVal Cmp = Engine.EvalBinOp(stateLoad, BinaryOperator::EQ, theValueVal, + SVal Cmp = SVator.EvalBinOp(stateLoad, BinaryOperator::EQ, theValueVal, oldValueVal, Engine.getContext().IntTy); const GRState *stateEqual = stateLoad->assume(Cmp, true); @@ -1370,9 +1372,8 @@ static bool EvalOSAtomicCompareAndSwap(ExplodedNodeSet& Dst, // Handle implicit value casts. if (const TypedRegion *R = dyn_cast_or_null<TypedRegion>(location.getAsRegion())) { - llvm::tie(state, val) = - Engine.getSValuator().EvalCast(val, state, R->getValueType(C), - newValueExpr->getType()); + llvm::tie(state, val) = SVator.EvalCast(val, state, R->getValueType(C), + newValueExpr->getType()); } Engine.EvalStore(TmpStore, theValueExpr, N, stateEqual, location, @@ -3033,39 +3034,6 @@ void GRExprEngine::VisitBinaryOperator(BinaryOperator* B, } //===----------------------------------------------------------------------===// -// Transfer-function Helpers. -//===----------------------------------------------------------------------===// - -SVal GRExprEngine::EvalBinOp(const GRState* state, BinaryOperator::Opcode Op, - SVal L, SVal R, QualType T) { - - if (L.isUndef() || R.isUndef()) - return UndefinedVal(); - - if (L.isUnknown() || R.isUnknown()) - return UnknownVal(); - - if (isa<Loc>(L)) { - if (isa<Loc>(R)) - return SVator.EvalBinOpLL(Op, cast<Loc>(L), cast<Loc>(R), T); - else - return SVator.EvalBinOpLN(state, Op, cast<Loc>(L), cast<NonLoc>(R), T); - } - - if (isa<Loc>(R)) { - // Support pointer arithmetic where the increment/decrement operand - // is on the left and the pointer on the right. - - assert (Op == BinaryOperator::Add || Op == BinaryOperator::Sub); - - // Commute the operands. - return SVator.EvalBinOpLN(state, Op, cast<Loc>(R), cast<NonLoc>(L), T); - } - else - return SVator.EvalBinOpNN(Op, cast<NonLoc>(L), cast<NonLoc>(R), T); -} - -//===----------------------------------------------------------------------===// // Visualization. //===----------------------------------------------------------------------===// |