Added a new method to GRStmtNodeBuilder to build nodes using an arbitrary

PostStmt program point. This allows clients to pass in PostStmtCustom program
points.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65080 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Ted Kremenek 2009-02-19 23:45:28 +00:00
Родитель 2680b5f926
Коммит 58e899b336
2 изменённых файлов: 14 добавлений и 4 удалений

Просмотреть файл

@ -141,6 +141,9 @@ public:
return getBlockCounter().getNumVisited(B.getBlockID());
}
ExplodedNodeImpl*
generateNodeImpl(PostStmt PP, const void* State, ExplodedNodeImpl* Pred);
ExplodedNodeImpl*
generateNodeImpl(Stmt* S, const void* State, ExplodedNodeImpl* Pred,
ProgramPoint::Kind K = ProgramPoint::PostStmtKind);
@ -193,6 +196,10 @@ public:
return static_cast<NodeTy*>(NB.getLastNode());
}
NodeTy* generateNode(PostStmt PP, const StateTy* St, NodeTy* Pred) {
return static_cast<NodeTy*>(NB.generateNodeImpl(PP, St, Pred));
}
NodeTy* generateNode(Stmt* S, const StateTy* St, NodeTy* Pred,
ProgramPoint::Kind K) {
HasGeneratedNode = true;

Просмотреть файл

@ -368,7 +368,7 @@ void GRStmtNodeBuilderImpl::GenerateAutoTransition(ExplodedNodeImpl* N) {
Eng.WList->Enqueue(Succ, B, Idx+1);
}
static inline ProgramPoint GetPostLoc(Stmt* S, ProgramPoint::Kind K) {
static inline PostStmt GetPostLoc(Stmt* S, ProgramPoint::Kind K) {
switch (K) {
default:
assert(false && "Invalid PostXXXKind.");
@ -403,10 +403,13 @@ ExplodedNodeImpl*
GRStmtNodeBuilderImpl::generateNodeImpl(Stmt* S, const void* State,
ExplodedNodeImpl* Pred,
ProgramPoint::Kind K) {
return generateNodeImpl(GetPostLoc(S, K), State, Pred);
}
ExplodedNodeImpl*
GRStmtNodeBuilderImpl::generateNodeImpl(PostStmt Loc, const void* State,
ExplodedNodeImpl* Pred) {
bool IsNew;
ProgramPoint Loc = GetPostLoc(S, K);
ExplodedNodeImpl* N = Eng.G->getNodeImpl(Loc, State, &IsNew);
N->addPredecessor(Pred);
Deferred.erase(Pred);