aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/GRExprEngine.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-08-25 18:44:25 +0000
committerTed Kremenek <kremenek@apple.com>2009-08-25 18:44:25 +0000
commitff4264dae31cf42807b64ecc114906b0b835690a (patch)
tree30d7af74b21dcbddfd278996a74cb541bf88183f /lib/Analysis/GRExprEngine.cpp
parent91cf4199cca311ea9c3b3a4e2b3984d508c9e5e3 (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.cpp42
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.
//===----------------------------------------------------------------------===//