зеркало из https://github.com/microsoft/clang-1.git
Renamed deterministic EvalBinOp to DetermEvalBinOpNN. This name mangling is unfortunately needed because virtual methods with the same name can be hidden by subclasses.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53751 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
6297a8ec31
Коммит
ad8329e58d
|
@ -548,12 +548,13 @@ protected:
|
|||
}
|
||||
|
||||
RVal EvalBinOp(BinaryOperator::Opcode Op, NonLVal L, NonLVal R) {
|
||||
return R.isValid() ? getTF().EvalBinOp(getStateManager(), Op, L, R) : R;
|
||||
return R.isValid() ? getTF().DetermEvalBinOpNN(getStateManager(), Op, L, R)
|
||||
: R;
|
||||
}
|
||||
|
||||
RVal EvalBinOp(BinaryOperator::Opcode Op, NonLVal L, RVal R) {
|
||||
return R.isValid() ? getTF().EvalBinOp(getStateManager(), Op, L,
|
||||
cast<NonLVal>(R)) : R;
|
||||
return R.isValid() ? getTF().DetermEvalBinOpNN(getStateManager(), Op, L,
|
||||
cast<NonLVal>(R)) : R;
|
||||
}
|
||||
|
||||
void EvalBinOp(ExplodedNodeSet<ValueState>& Dst, Expr* Ex,
|
||||
|
@ -589,8 +590,8 @@ protected:
|
|||
cast<NonLVal>(L));
|
||||
}
|
||||
else
|
||||
return getTF().EvalBinOp(getStateManager(), Op, cast<NonLVal>(L),
|
||||
cast<NonLVal>(R));
|
||||
return getTF().DetermEvalBinOpNN(getStateManager(), Op, cast<NonLVal>(L),
|
||||
cast<NonLVal>(R));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -25,6 +25,19 @@ namespace clang {
|
|||
class ObjCMessageExpr;
|
||||
|
||||
class GRTransferFuncs {
|
||||
|
||||
friend class GRExprEngine;
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
virtual RVal DetermEvalBinOpNN(ValueStateManager& StateMgr,
|
||||
BinaryOperator::Opcode Op,
|
||||
NonLVal L, NonLVal R) {
|
||||
return UnknownVal();
|
||||
}
|
||||
|
||||
|
||||
public:
|
||||
GRTransferFuncs() {}
|
||||
virtual ~GRTransferFuncs() {}
|
||||
|
@ -47,12 +60,6 @@ public:
|
|||
virtual RVal EvalComplement(GRExprEngine& Engine, NonLVal X) = 0;
|
||||
|
||||
// Binary Operators.
|
||||
|
||||
virtual RVal EvalBinOp(ValueStateManager& StateMgr, BinaryOperator::Opcode Op,
|
||||
NonLVal L, NonLVal R) {
|
||||
return UnknownVal();
|
||||
}
|
||||
|
||||
virtual void EvalBinOpNN(ValueStateSet& OStates, ValueStateManager& StateMgr,
|
||||
const ValueState* St, Expr* Ex,
|
||||
BinaryOperator::Opcode Op, NonLVal L, NonLVal R);
|
||||
|
|
|
@ -450,8 +450,9 @@ RVal GRSimpleVals::EvalComplement(GRExprEngine& Eng, NonLVal X) {
|
|||
|
||||
// Binary operators.
|
||||
|
||||
RVal GRSimpleVals::EvalBinOp(ValueStateManager& StateMgr,
|
||||
BinaryOperator::Opcode Op, NonLVal L, NonLVal R) {
|
||||
RVal GRSimpleVals::DetermEvalBinOpNN(ValueStateManager& StateMgr,
|
||||
BinaryOperator::Opcode Op,
|
||||
NonLVal L, NonLVal R) {
|
||||
|
||||
BasicValueFactory& BasicVals = StateMgr.getBasicVals();
|
||||
|
||||
|
|
|
@ -25,6 +25,12 @@ class PathDiagnostic;
|
|||
class ASTContext;
|
||||
|
||||
class GRSimpleVals : public GRTransferFuncs {
|
||||
protected:
|
||||
|
||||
virtual RVal DetermEvalBinOpNN(ValueStateManager& StateMgr,
|
||||
BinaryOperator::Opcode Op,
|
||||
NonLVal L, NonLVal R);
|
||||
|
||||
public:
|
||||
GRSimpleVals() {}
|
||||
virtual ~GRSimpleVals() {}
|
||||
|
@ -44,9 +50,6 @@ public:
|
|||
|
||||
// Binary Operators.
|
||||
|
||||
virtual RVal EvalBinOp(ValueStateManager& StateMgr, BinaryOperator::Opcode Op,
|
||||
NonLVal L, NonLVal R);
|
||||
|
||||
virtual RVal EvalBinOp(GRExprEngine& Engine, BinaryOperator::Opcode Op,
|
||||
LVal L, LVal R);
|
||||
|
||||
|
|
|
@ -44,5 +44,5 @@ void GRTransferFuncs::EvalBinOpNN(ValueStateSet& OStates,
|
|||
BinaryOperator::Opcode Op,
|
||||
NonLVal L, NonLVal R) {
|
||||
|
||||
OStates.Add(StateMgr.SetRVal(St, Ex, EvalBinOp(StateMgr, Op, L, R)));
|
||||
OStates.Add(StateMgr.SetRVal(St, Ex, DetermEvalBinOpNN(StateMgr, Op, L, R)));
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче