Merged ValueState and ValueStateImpl into just ValueState, with GRExprEngine::StateTy just becoming ValueState*.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47714 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Analysis/GRExprEngine.cpp b/Analysis/GRExprEngine.cpp
index e820cfd..6106ef3 100644
--- a/Analysis/GRExprEngine.cpp
+++ b/Analysis/GRExprEngine.cpp
@@ -26,7 +26,7 @@
using llvm::cast;
using llvm::APSInt;
-GRExprEngine::StateTy GRExprEngine::getInitialState() {
+ValueState* GRExprEngine::getInitialState() {
// The LiveVariables information already has a compilation of all VarDecls
// used in the function. Iterate through this set, and "symbolicate"
@@ -35,7 +35,7 @@
typedef LiveVariables::AnalysisDataTy LVDataTy;
LVDataTy& D = Liveness.getAnalysisData();
- ValueStateImpl StateImpl = *StateMgr.getInitialState().getImpl();
+ ValueState StateImpl = *StateMgr.getInitialState();
for (LVDataTy::decl_iterator I=D.begin_decl(), E=D.end_decl(); I != E; ++I) {
@@ -50,8 +50,7 @@
return StateMgr.getPersistentState(StateImpl);
}
-GRExprEngine::StateTy
-GRExprEngine::SetRVal(StateTy St, Expr* Ex, const RVal& V) {
+ValueState* GRExprEngine::SetRVal(ValueState* St, Expr* Ex, RVal V) {
if (!StateCleaned) {
St = RemoveDeadBindings(CurrentStmt, St);
@@ -70,9 +69,10 @@
return StateMgr.SetRVal(St, Ex, V, isBlkExpr, false);
}
-const GRExprEngine::StateTy::BufferTy&
-GRExprEngine::SetRVal(StateTy St, Expr* Ex, const RVal::BufferTy& RB,
- StateTy::BufferTy& RetBuf) {
+#if 0
+const ValueState::BufferTy&
+GRExprEngine::SetRVal(ValueState* St, Expr* Ex, const RVal::BufferTy& RB,
+ ValueState::BufferTy& RetBuf) {
assert (RetBuf.empty());
@@ -81,9 +81,9 @@
return RetBuf;
}
+#endif
-GRExprEngine::StateTy
-GRExprEngine::SetRVal(StateTy St, const LVal& LV, const RVal& RV) {
+ValueState* GRExprEngine::SetRVal(ValueState* St, LVal LV, RVal RV) {
if (!StateCleaned) {
St = RemoveDeadBindings(CurrentStmt, St);
@@ -93,8 +93,8 @@
return StateMgr.SetRVal(St, LV, RV);
}
-GRExprEngine::StateTy
-GRExprEngine::MarkBranch(StateTy St, Stmt* Terminator, bool branchTaken) {
+ValueState* GRExprEngine::MarkBranch(ValueState* St, Stmt* Terminator,
+ bool branchTaken) {
switch (Terminator->getStmtClass()) {
default:
@@ -151,7 +151,7 @@
BranchNodeBuilder& builder) {
// Remove old bindings for subexpressions.
- StateTy PrevState = StateMgr.RemoveSubExprBindings(builder.getState());
+ ValueState* PrevState = StateMgr.RemoveSubExprBindings(builder.getState());
// Check for NULL conditions; e.g. "for(;;)"
if (!Condition) {
@@ -204,7 +204,7 @@
bool isFeasible = true;
- StateTy St = Assume(PrevState, V, true, isFeasible);
+ ValueState* St = Assume(PrevState, V, true, isFeasible);
if (isFeasible)
builder.generateNode(MarkBranch(St, Term, true), true);
@@ -224,7 +224,7 @@
bool isFeasible = false;
- StateTy St = Assume(PrevState, V, false, isFeasible);
+ ValueState* St = Assume(PrevState, V, false, isFeasible);
if (isFeasible)
builder.generateNode(MarkBranch(St, Term, false), false);
@@ -239,7 +239,7 @@
/// nodes by processing the 'effects' of a computed goto jump.
void GRExprEngine::ProcessIndirectGoto(IndirectGotoNodeBuilder& builder) {
- StateTy St = builder.getState();
+ ValueState* St = builder.getState();
RVal V = GetRVal(St, builder.getTarget());
// Three possibilities:
@@ -286,7 +286,7 @@
typedef SwitchNodeBuilder::iterator iterator;
- StateTy St = builder.getState();
+ ValueState* St = builder.getState();
Expr* CondE = builder.getCondition();
RVal CondV = GetRVal(St, CondE);
@@ -296,7 +296,7 @@
return;
}
- StateTy DefaultSt = St;
+ ValueState* DefaultSt = St;
// While most of this can be assumed (such as the signedness), having it
// just computed makes sure everything makes the same assumptions end-to-end.
@@ -342,7 +342,7 @@
// Now "assume" that the case matches.
bool isFeasible = false;
- StateTy StNew = Assume(St, Res, true, isFeasible);
+ ValueState* StNew = Assume(St, Res, true, isFeasible);
if (isFeasible) {
builder.generateCaseStmtNode(I, StNew);
@@ -382,7 +382,7 @@
assert (B == CurrentStmt && getCFG().isBlkExpr(B));
- StateTy St = Pred->getState();
+ ValueState* St = Pred->getState();
RVal X = GetBlkExprRVal(St, B);
assert (X.isUndef());
@@ -410,7 +410,7 @@
// the payoff is not likely to be large. Instead, we do eager evaluation.
bool isFeasible = false;
- StateTy NewState = Assume(St, X, true, isFeasible);
+ ValueState* NewState = Assume(St, X, true, isFeasible);
if (isFeasible)
Nodify(Dst, B, Pred, SetBlkExprRVal(NewState, B, MakeConstantVal(1U, B)));
@@ -446,7 +446,7 @@
// dead mappings removed.
if (Dst.size() == 1 && *Dst.begin() == StmtEntryNode) {
- StateTy St = RemoveDeadBindings(S, StmtEntryNode->getState());
+ ValueState* St = RemoveDeadBindings(S, StmtEntryNode->getState());
builder.generateNode(S, St, StmtEntryNode);
}
@@ -458,7 +458,7 @@
}
GRExprEngine::NodeTy*
-GRExprEngine::Nodify(NodeSet& Dst, Stmt* S, NodeTy* Pred, StateTy St) {
+GRExprEngine::Nodify(NodeSet& Dst, Stmt* S, NodeTy* Pred, ValueState* St) {
// If the state hasn't changed, don't generate a new node.
if (St == Pred->getState())
@@ -470,12 +470,14 @@
return N;
}
+#if 0
void GRExprEngine::Nodify(NodeSet& Dst, Stmt* S, NodeTy* Pred,
- const StateTy::BufferTy& SB) {
+ const ValueState::BufferTy& SB) {
- for (StateTy::BufferTy::const_iterator I=SB.begin(), E=SB.end(); I!=E; ++I)
+ for (ValueState::BufferTy::const_iterator I=SB.begin(), E=SB.end(); I!=E; ++I)
Nodify(Dst, S, Pred, *I);
}
+#endif
void GRExprEngine::VisitDeclRefExpr(DeclRefExpr* D, NodeTy* Pred, NodeSet& Dst){
@@ -487,7 +489,7 @@
// If we are here, we are loading the value of the decl and binding
// it to the block-level expression.
- StateTy St = Pred->getState();
+ ValueState* St = Pred->getState();
Nodify(Dst, D, Pred, SetRVal(St, D, GetRVal(St, D)));
}
@@ -524,7 +526,7 @@
// Finally, evaluate the function call.
for (NodeSet::iterator DI = DstTmp.begin(), DE = DstTmp.end(); DI!=DE; ++DI) {
- StateTy St = (*DI)->getState();
+ ValueState* St = (*DI)->getState();
RVal L = GetLVal(St, Callee);
// Check for undefined control-flow.
@@ -589,7 +591,7 @@
for (NodeSet::iterator I1 = S1.begin(), E1 = S1.end(); I1 != E1; ++I1) {
NodeTy* N = *I1;
- StateTy St = N->getState();
+ ValueState* St = N->getState();
RVal V = GetRVal(St, Ex);
Nodify(Dst, CastE, N, SetRVal(St, CastE, EvalCast(V, CastE->getType())));
}
@@ -598,7 +600,7 @@
void GRExprEngine::VisitDeclStmt(DeclStmt* DS, GRExprEngine::NodeTy* Pred,
GRExprEngine::NodeSet& Dst) {
- StateTy St = Pred->getState();
+ ValueState* St = Pred->getState();
for (const ScopedDecl* D = DS->getDecl(); D; D = D->getNextDeclarator())
if (const VarDecl* VD = dyn_cast<VarDecl>(D)) {
@@ -638,7 +640,7 @@
assert (Ex == CurrentStmt && getCFG().isBlkExpr(Ex));
- StateTy St = Pred->getState();
+ ValueState* St = Pred->getState();
RVal X = GetBlkExprRVal(St, Ex);
assert (X.isUndef());
@@ -697,7 +699,7 @@
for (NodeSet::iterator I = DstTmp.begin(), DE = DstTmp.end(); I != DE; ++I) {
NodeTy* N = *I;
- StateTy St = N->getState();
+ ValueState* St = N->getState();
// FIXME: Bifurcate when dereferencing a symbolic with no constraints?
@@ -735,7 +737,7 @@
// "Assume" that the pointer is Not-NULL.
- StateTy StNotNull = Assume(St, LV, true, isFeasibleNotNull);
+ ValueState* StNotNull = Assume(St, LV, true, isFeasibleNotNull);
if (isFeasibleNotNull) {
@@ -750,7 +752,7 @@
// Now "assume" that the pointer is NULL.
- StateTy StNull = Assume(St, LV, false, isFeasibleNull);
+ ValueState* StNull = Assume(St, LV, false, isFeasibleNull);
if (isFeasibleNull) {
@@ -800,7 +802,7 @@
for (NodeSet::iterator I1 = S1.begin(), E1 = S1.end(); I1 != E1; ++I1) {
NodeTy* N1 = *I1;
- StateTy St = N1->getState();
+ ValueState* St = N1->getState();
RVal SubV = use_GetLVal ? GetLVal(St, U->getSubExpr()) :
GetRVal(St, U->getSubExpr());
@@ -907,7 +909,7 @@
SourceLocation Loc = U->getExprLoc();
uint64_t size = getContext().getTypeSize(T, Loc) / 8;
- StateTy St = Pred->getState();
+ ValueState* St = Pred->getState();
St = SetRVal(St, U, NonLVal::MakeVal(ValMgr, size, U->getType(), Loc));
Nodify(Dst, U, Pred, St);
@@ -975,7 +977,7 @@
for (NodeSet::iterator I2 = S2.begin(), E2 = S2.end(); I2 != E2; ++I2) {
NodeTy* N2 = *I2;
- StateTy St = N2->getState();
+ ValueState* St = N2->getState();
Expr* RHS = B->getRHS();
RVal RightV = GetRVal(St, RHS);
@@ -1004,7 +1006,7 @@
// First, "assume" that the denominator is 0 or undefined.
bool isFeasible = false;
- StateTy ZeroSt = Assume(St, RightV, false, isFeasible);
+ ValueState* ZeroSt = Assume(St, RightV, false, isFeasible);
if (isFeasible) {
NodeTy* DivZeroNode = Builder->generateNode(B, ZeroSt, N2);
@@ -1160,7 +1162,7 @@
// First, "assume" that the denominator is 0.
bool isFeasible = false;
- StateTy ZeroSt = Assume(St, RightV, false, isFeasible);
+ ValueState* ZeroSt = Assume(St, RightV, false, isFeasible);
if (isFeasible) {
NodeTy* DivZeroNode = Builder->generateNode(B, ZeroSt, N2);
@@ -1236,7 +1238,7 @@
break;
}
else if (B->getOpcode() == BinaryOperator::Comma) {
- StateTy St = Pred->getState();
+ ValueState* St = Pred->getState();
Nodify(Dst, B, Pred, SetRVal(St, B, GetRVal(St, B->getRHS())));
break;
}
@@ -1301,7 +1303,7 @@
case Stmt::StmtExprClass: {
StmtExpr* SE = cast<StmtExpr>(S);
- StateTy St = Pred->getState();
+ ValueState* St = Pred->getState();
Expr* LastExpr = cast<Expr>(*SE->getSubStmt()->body_rbegin());
Nodify(Dst, SE, Pred, SetRVal(St, SE, GetRVal(St, LastExpr)));
break;
@@ -1339,7 +1341,7 @@
// "Assume" logic.
//===----------------------------------------------------------------------===//
-GRExprEngine::StateTy GRExprEngine::Assume(StateTy St, LVal Cond,
+ValueState* GRExprEngine::Assume(ValueState* St, LVal Cond,
bool Assumption,
bool& isFeasible) {
switch (Cond.getSubKind()) {
@@ -1370,7 +1372,7 @@
}
}
-GRExprEngine::StateTy GRExprEngine::Assume(StateTy St, NonLVal Cond,
+ValueState* GRExprEngine::Assume(ValueState* St, NonLVal Cond,
bool Assumption,
bool& isFeasible) {
switch (Cond.getSubKind()) {
@@ -1405,18 +1407,18 @@
}
}
-GRExprEngine::StateTy
-GRExprEngine::AssumeSymNE(StateTy St, SymbolID sym,
+ValueState*
+GRExprEngine::AssumeSymNE(ValueState* St, SymbolID sym,
const llvm::APSInt& V, bool& isFeasible) {
// First, determine if sym == X, where X != V.
- if (const llvm::APSInt* X = St.getSymVal(sym)) {
+ if (const llvm::APSInt* X = St->getSymVal(sym)) {
isFeasible = *X != V;
return St;
}
// Second, determine if sym != V.
- if (St.isNotEqual(sym, V)) {
+ if (St->isNotEqual(sym, V)) {
isFeasible = true;
return St;
}
@@ -1428,18 +1430,18 @@
return StateMgr.AddNE(St, sym, V);
}
-GRExprEngine::StateTy
-GRExprEngine::AssumeSymEQ(StateTy St, SymbolID sym,
+ValueState*
+GRExprEngine::AssumeSymEQ(ValueState* St, SymbolID sym,
const llvm::APSInt& V, bool& isFeasible) {
// First, determine if sym == X, where X != V.
- if (const llvm::APSInt* X = St.getSymVal(sym)) {
+ if (const llvm::APSInt* X = St->getSymVal(sym)) {
isFeasible = *X == V;
return St;
}
// Second, determine if sym != V.
- if (St.isNotEqual(sym, V)) {
+ if (St->isNotEqual(sym, V)) {
isFeasible = false;
return St;
}
@@ -1451,8 +1453,8 @@
return StateMgr.AddEQ(St, sym, V);
}
-GRExprEngine::StateTy
-GRExprEngine::AssumeSymInt(StateTy St, bool Assumption,
+ValueState*
+GRExprEngine::AssumeSymInt(ValueState* St, bool Assumption,
const SymIntConstraint& C, bool& isFeasible) {
switch (C.getOpcode()) {
@@ -1486,14 +1488,13 @@
struct VISIBILITY_HIDDEN DOTGraphTraits<GRExprEngine::NodeTy*> :
public DefaultDOTGraphTraits {
- static void PrintVarBindings(std::ostream& Out, GRExprEngine::StateTy St) {
+ static void PrintVarBindings(std::ostream& Out, ValueState* St) {
Out << "Variables:\\l";
bool isFirst = true;
- for (GRExprEngine::StateTy::vb_iterator I=St.vb_begin(),
- E=St.vb_end(); I!=E;++I) {
+ for (ValueState::vb_iterator I=St->vb_begin(), E=St->vb_end(); I!=E;++I) {
if (isFirst)
isFirst = false;
@@ -1507,12 +1508,11 @@
}
- static void PrintSubExprBindings(std::ostream& Out, GRExprEngine::StateTy St){
+ static void PrintSubExprBindings(std::ostream& Out, ValueState* St){
bool isFirst = true;
- for (GRExprEngine::StateTy::seb_iterator I=St.seb_begin(), E=St.seb_end();
- I != E;++I) {
+ for (ValueState::seb_iterator I=St->seb_begin(), E=St->seb_end();I!=E;++I) {
if (isFirst) {
Out << "\\l\\lSub-Expressions:\\l";
@@ -1528,12 +1528,11 @@
}
}
- static void PrintBlkExprBindings(std::ostream& Out, GRExprEngine::StateTy St){
+ static void PrintBlkExprBindings(std::ostream& Out, ValueState* St){
bool isFirst = true;
- for (GRExprEngine::StateTy::beb_iterator I=St.beb_begin(), E=St.beb_end();
- I != E; ++I) {
+ for (ValueState::beb_iterator I=St->beb_begin(), E=St->beb_end(); I!=E;++I){
if (isFirst) {
Out << "\\l\\lBlock-level Expressions:\\l";
isFirst = false;
@@ -1548,8 +1547,8 @@
}
}
- static void PrintEQ(std::ostream& Out, GRExprEngine::StateTy St) {
- ValueState::ConstEqTy CE = St.getImpl()->ConstEq;
+ static void PrintEQ(std::ostream& Out, ValueState* St) {
+ ValueState::ConstEqTy CE = St->ConstEq;
if (CE.isEmpty())
return;
@@ -1560,8 +1559,8 @@
Out << "\\l $" << I.getKey() << " : " << I.getData()->toString();
}
- static void PrintNE(std::ostream& Out, GRExprEngine::StateTy St) {
- ValueState::ConstNotEqTy NE = St.getImpl()->ConstNotEq;
+ static void PrintNE(std::ostream& Out, ValueState* St) {
+ ValueState::ConstNotEqTy NE = St->ConstNotEq;
if (NE.isEmpty())
return;
@@ -1692,9 +1691,9 @@
}
}
- Out << "\\|StateID: " << (void*) N->getState().getImpl() << "\\|";
+ Out << "\\|StateID: " << (void*) N->getState() << "\\|";
- N->getState().printDOT(Out);
+ N->getState()->printDOT(Out);
Out << "\\l";
return Out.str();