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 | 5939402e2c72889843a05dc2f892de5da650e029 (patch) | |
| tree | 2f09478499c72b07e6fb8915c9f0ccff91c31d06 /clang/lib/Analysis/GRExprEngine.cpp | |
| parent | 8e6aee5821865dbfc7af722372e30eab479a8344 (diff) | |
| download | bcm5719-llvm-5939402e2c72889843a05dc2f892de5da650e029.tar.gz bcm5719-llvm-5939402e2c72889843a05dc2f892de5da650e029.zip | |
Add 'previsit' Checker pass for ObjCMessageExprs.
llvm-svn: 76831
Diffstat (limited to 'clang/lib/Analysis/GRExprEngine.cpp')
| -rw-r--r-- | clang/lib/Analysis/GRExprEngine.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/clang/lib/Analysis/GRExprEngine.cpp b/clang/lib/Analysis/GRExprEngine.cpp index eb31f84b0c4..dd2bda13314 100644 --- a/clang/lib/Analysis/GRExprEngine.cpp +++ b/clang/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. |

