зеркало из https://github.com/microsoft/clang-1.git
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:
Родитель
2680b5f926
Коммит
58e899b336
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче