summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/CFRefCount.cpp
diff options
context:
space:
mode:
authorZhongxing Xu <xuzhongxing@gmail.com>2009-11-24 07:06:39 +0000
committerZhongxing Xu <xuzhongxing@gmail.com>2009-11-24 07:06:39 +0000
commit9e200798c2956d75c7c3e9f262baf7f2031e593f (patch)
treeef490f0e2c9d17e30162bcc949fed1bbb20c687f /clang/lib/Analysis/CFRefCount.cpp
parent506b89325cb191a131b805534a31ded6742d383c (diff)
downloadbcm5719-llvm-9e200798c2956d75c7c3e9f262baf7f2031e593f.tar.gz
bcm5719-llvm-9e200798c2956d75c7c3e9f262baf7f2031e593f.zip
Refactor NilReceiverStructRet and NilReceiverLargerThanVoidPtrRet into
CallAndMessageChecker. llvm-svn: 89745
Diffstat (limited to 'clang/lib/Analysis/CFRefCount.cpp')
-rw-r--r--clang/lib/Analysis/CFRefCount.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/Analysis/CFRefCount.cpp b/clang/lib/Analysis/CFRefCount.cpp
index 55e5f174cb9..433e350accc 100644
--- a/clang/lib/Analysis/CFRefCount.cpp
+++ b/clang/lib/Analysis/CFRefCount.cpp
@@ -3066,6 +3066,16 @@ void CFRefCount::EvalObjCMessageExpr(ExplodedNodeSet& Dst,
GRStmtNodeBuilder& Builder,
ObjCMessageExpr* ME,
ExplodedNode* Pred) {
+ // FIXME: Since we moved the nil check into a checker, we could get nil
+ // receiver here. Need a better way to check such case.
+ if (Expr* Receiver = ME->getReceiver()) {
+ const GRState *state = Pred->getState();
+ DefinedOrUnknownSVal L=cast<DefinedOrUnknownSVal>(state->getSVal(Receiver));
+ if (!state->Assume(L, true)) {
+ Dst.Add(Pred);
+ return;
+ }
+ }
RetainSummary *Summ =
ME->getReceiver()
OpenPOWER on IntegriCloud