forked from OSchip/llvm-project
[analyzer] Convert VisitDeclStmt to use local node builder.
llvm-svn: 142830
This commit is contained in:
parent
cbdf10be19
commit
5236792019
|
@ -283,6 +283,24 @@ public:
|
|||
C.ContextPred->getLocationContext()->getCurrentStackFrame(),
|
||||
C.Block->getBlockID());
|
||||
}
|
||||
|
||||
void takeNodes(const ExplodedNodeSet &S) {
|
||||
for (ExplodedNodeSet::iterator I = S.begin(), E = S.end(); I != E; ++I )
|
||||
Frontier.erase(*I);
|
||||
}
|
||||
|
||||
void takeNodes(ExplodedNode *N) {
|
||||
Frontier.erase(N);
|
||||
}
|
||||
|
||||
void addNodes(const ExplodedNodeSet &S) {
|
||||
Frontier.insert(S);
|
||||
}
|
||||
|
||||
void addNodes(ExplodedNode *N) {
|
||||
Frontier.Add(N);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
class CommonNodeBuilder {
|
||||
|
@ -403,23 +421,6 @@ public:
|
|||
BuildSinks = Tmp;
|
||||
return N;
|
||||
}
|
||||
|
||||
void takeNodes(const ExplodedNodeSet &S) {
|
||||
for (ExplodedNodeSet::iterator I = S.begin(), E = S.end(); I != E; ++I )
|
||||
Frontier.erase(*I);
|
||||
}
|
||||
|
||||
void takeNodes(ExplodedNode *N) {
|
||||
Frontier.erase(N);
|
||||
}
|
||||
|
||||
void addNodes(const ExplodedNodeSet &S) {
|
||||
Frontier.insert(S);
|
||||
}
|
||||
|
||||
void addNodes(ExplodedNode *N) {
|
||||
Frontier.Add(N);
|
||||
}
|
||||
};
|
||||
|
||||
class BranchNodeBuilder: public NodeBuilder {
|
||||
|
|
|
@ -1297,7 +1297,7 @@ void ExprEngine::evalBind(ExplodedNodeSet &Dst, const Stmt *StoreE,
|
|||
getCheckerManager().runCheckersForBind(CheckedSet, Pred, location, Val,
|
||||
StoreE, *this);
|
||||
|
||||
// TODO: Remove TmpDst after NB refactoring is done.
|
||||
// TODO:AZ Remove TmpDst after NB refactoring is done.
|
||||
ExplodedNodeSet TmpDst;
|
||||
Builder->takeNodes(CheckedSet);
|
||||
PureStmtNodeBuilder Bldr(CheckedSet, TmpDst, *currentBuilderContext);
|
||||
|
|
|
@ -302,6 +302,9 @@ void ExprEngine::VisitCast(const CastExpr *CastE, const Expr *Ex,
|
|||
void ExprEngine::VisitCompoundLiteralExpr(const CompoundLiteralExpr *CL,
|
||||
ExplodedNode *Pred,
|
||||
ExplodedNodeSet &Dst) {
|
||||
PureStmtNodeBuilder B(Pred, Dst, *currentBuilderContext);
|
||||
Builder->takeNodes(Pred);
|
||||
|
||||
const InitListExpr *ILE
|
||||
= cast<InitListExpr>(CL->getInitializer()->IgnoreParens());
|
||||
|
||||
|
@ -311,9 +314,10 @@ void ExprEngine::VisitCompoundLiteralExpr(const CompoundLiteralExpr *CL,
|
|||
state = state->bindCompoundLiteral(CL, LC, ILV);
|
||||
|
||||
if (CL->isLValue())
|
||||
MakeNode(Dst, CL, Pred, state->BindExpr(CL, state->getLValue(CL, LC)));
|
||||
B.generateNode(CL, Pred, state->BindExpr(CL, state->getLValue(CL, LC)));
|
||||
else
|
||||
MakeNode(Dst, CL, Pred, state->BindExpr(CL, ILV));
|
||||
B.generateNode(CL, Pred, state->BindExpr(CL, ILV));
|
||||
Builder->addNodes(Dst);
|
||||
}
|
||||
|
||||
void ExprEngine::VisitDeclStmt(const DeclStmt *DS, ExplodedNode *Pred,
|
||||
|
@ -333,8 +337,9 @@ void ExprEngine::VisitDeclStmt(const DeclStmt *DS, ExplodedNode *Pred,
|
|||
ExplodedNodeSet dstPreVisit;
|
||||
getCheckerManager().runCheckersForPreStmt(dstPreVisit, Pred, DS, *this);
|
||||
|
||||
PureStmtNodeBuilder B(dstPreVisit, Dst, *currentBuilderContext);
|
||||
Builder->takeNodes(dstPreVisit);
|
||||
const VarDecl *VD = dyn_cast<VarDecl>(D);
|
||||
|
||||
for (ExplodedNodeSet::iterator I = dstPreVisit.begin(), E = dstPreVisit.end();
|
||||
I!=E; ++I) {
|
||||
ExplodedNode *N = *I;
|
||||
|
@ -362,13 +367,15 @@ void ExprEngine::VisitDeclStmt(const DeclStmt *DS, ExplodedNode *Pred,
|
|||
InitVal = svalBuilder.getConjuredSymbolVal(NULL, InitEx,
|
||||
Builder->getCurrentBlockCount());
|
||||
}
|
||||
|
||||
B.takeNodes(N);
|
||||
evalBind(Dst, DS, N, state->getLValue(VD, LC), InitVal, true);
|
||||
B.addNodes(Dst);
|
||||
}
|
||||
else {
|
||||
MakeNode(Dst, DS, N, state->bindDeclWithNoInit(state->getRegion(VD, LC)));
|
||||
B.generateNode(DS, N,state->bindDeclWithNoInit(state->getRegion(VD, LC)));
|
||||
}
|
||||
}
|
||||
Builder->addNodes(Dst);
|
||||
}
|
||||
|
||||
void ExprEngine::VisitLogicalExpr(const BinaryOperator* B, ExplodedNode *Pred,
|
||||
|
|
Loading…
Reference in New Issue