diff options
author | Anna Zaks <ganna@apple.com> | 2013-04-25 00:41:32 +0000 |
---|---|---|
committer | Anna Zaks <ganna@apple.com> | 2013-04-25 00:41:32 +0000 |
commit | 3d8f462d58a4be21f9f5d287253b9b2565506ca5 (patch) | |
tree | 896410961dc5c92f91640b21d951c7b7e22d5e0e /lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp | |
parent | c873b51aea82cb7232c86c0012b9f493a62ef003 (diff) |
[analyzer] Fix a crash in RetainCountChecker - we should not rely on CallEnter::getCallExpr to return non-NULL
We get a CallEnter with a null expression, when processing a destructor. All other users of
CallEnter::getCallExpr work fine with null as return value.
(Addresses PR15832, Thanks to Jordan for reducing the test case!)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@180234 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp')
-rw-r--r-- | lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp b/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp index 824ce34ab3..0d256006e1 100644 --- a/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp @@ -2192,7 +2192,7 @@ GetAllocationSite(ProgramStateManager& StateMgr, const ExplodedNode *N, if (!InitMethodContext) if (Optional<CallEnter> CEP = N->getLocation().getAs<CallEnter>()) { const Stmt *CE = CEP->getCallExpr(); - if (const ObjCMessageExpr *ME = dyn_cast<ObjCMessageExpr>(CE)) { + if (const ObjCMessageExpr *ME = dyn_cast_or_null<ObjCMessageExpr>(CE)) { const Stmt *RecExpr = ME->getInstanceReceiver(); if (RecExpr) { SVal RecV = St->getSVal(RecExpr, NContext); |