diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-07-23 01:05:31 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-07-23 01:05:31 +0000 |
commit | 7a2d953224e51b2b7d7cbf9194a1dbc1ca0be4a0 (patch) | |
tree | 8b9b91aaa8d50afa076d8df152279ce1c41dd158 /lib/Analysis/GRExprEngine.cpp | |
parent | 4084c306635b70f37029dca938444e6013f08684 (diff) |
Add 'previsit' Checker pass for ObjCMessageExprs.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76831 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/GRExprEngine.cpp')
-rw-r--r-- | lib/Analysis/GRExprEngine.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/Analysis/GRExprEngine.cpp b/lib/Analysis/GRExprEngine.cpp index eb31f84b0c..dd2bda1331 100644 --- a/lib/Analysis/GRExprEngine.cpp +++ b/lib/Analysis/GRExprEngine.cpp @@ -1855,12 +1855,12 @@ void GRExprEngine::VisitObjCMessageExprArgHelper(ObjCMessageExpr* ME, Visit(Receiver, Pred, Tmp); for (NodeSet::iterator NI = Tmp.begin(), NE = Tmp.end(); NI != NE; ++NI) - VisitObjCMessageExprDispatchHelper(ME, *NI, Dst); + VisitObjCMessageExprDispatchCheckers(ME, *NI, Dst); return; } - VisitObjCMessageExprDispatchHelper(ME, Pred, Dst); + VisitObjCMessageExprDispatchCheckers(ME, Pred, Dst); return; } @@ -1873,6 +1873,19 @@ void GRExprEngine::VisitObjCMessageExprArgHelper(ObjCMessageExpr* ME, VisitObjCMessageExprArgHelper(ME, AI, AE, *NI, Dst); } +void GRExprEngine::VisitObjCMessageExprDispatchCheckers(ObjCMessageExpr* ME, + NodeTy* Pred, + NodeSet& Dst) { + NodeSet Src; + Src.Add(Pred); + NodeSet DstTmp; + // Perform the previsit of the ObjCMessageExpr, storing the results in DstTmp. + CheckerVisit(ME, Src, DstTmp, true); + + for (NodeSet::iterator NI = DstTmp.begin(), NE = DstTmp.end(); NI != NE; ++NI) + VisitObjCMessageExprDispatchHelper(ME, *NI, Dst); +} + void GRExprEngine::VisitObjCMessageExprDispatchHelper(ObjCMessageExpr* ME, NodeTy* Pred, NodeSet& Dst) { @@ -2043,7 +2056,7 @@ void GRExprEngine::VisitObjCMessageExprDispatchHelper(ObjCMessageExpr* ME, return; } } - + // Check if we raise an exception. For now treat these as sinks. Eventually // we will want to handle exceptions properly. |