added post-statement callback to CXXNewExpr and pre-statement callback to CXXDeleteExpr
llvm-svn: 170234
This commit is contained in:
parent
53e3d6d7f0
commit
5363bf157f
|
|
@ -780,21 +780,28 @@ void ExprEngine::Visit(const Stmt *S, ExplodedNode *Pred,
|
|||
break;
|
||||
}
|
||||
|
||||
case Stmt::CXXNewExprClass: {
|
||||
Bldr.takeNodes(Pred);
|
||||
const CXXNewExpr *NE = cast<CXXNewExpr>(S);
|
||||
VisitCXXNewExpr(NE, Pred, Dst);
|
||||
Bldr.addNodes(Dst);
|
||||
break;
|
||||
}
|
||||
|
||||
case Stmt::CXXDeleteExprClass: {
|
||||
Bldr.takeNodes(Pred);
|
||||
const CXXDeleteExpr *CDE = cast<CXXDeleteExpr>(S);
|
||||
VisitCXXDeleteExpr(CDE, Pred, Dst);
|
||||
Bldr.addNodes(Dst);
|
||||
break;
|
||||
}
|
||||
case Stmt::CXXNewExprClass: {
|
||||
Bldr.takeNodes(Pred);
|
||||
ExplodedNodeSet PostVisit;
|
||||
VisitCXXNewExpr(cast<CXXNewExpr>(S), Pred, PostVisit);
|
||||
getCheckerManager().runCheckersForPostStmt(Dst, PostVisit, S, *this);
|
||||
Bldr.addNodes(Dst);
|
||||
break;
|
||||
}
|
||||
|
||||
case Stmt::CXXDeleteExprClass: {
|
||||
Bldr.takeNodes(Pred);
|
||||
ExplodedNodeSet PreVisit;
|
||||
const CXXDeleteExpr *CDE = cast<CXXDeleteExpr>(S);
|
||||
getCheckerManager().runCheckersForPreStmt(PreVisit, Pred, S, *this);
|
||||
|
||||
for (ExplodedNodeSet::iterator i = PreVisit.begin(),
|
||||
e = PreVisit.end(); i != e ; ++i)
|
||||
VisitCXXDeleteExpr(CDE, *i, Dst);
|
||||
|
||||
Bldr.addNodes(Dst);
|
||||
break;
|
||||
}
|
||||
// FIXME: ChooseExpr is really a constant. We need to fix
|
||||
// the CFG do not model them as explicit control-flow.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue