summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Core
diff options
context:
space:
mode:
authorGeorge Karpenkov <ekarpenkov@apple.com>2018-10-31 17:38:29 +0000
committerGeorge Karpenkov <ekarpenkov@apple.com>2018-10-31 17:38:29 +0000
commit6fd5c86d9805bfbe1301cf255a0ce45565c5e28e (patch)
tree35eeab027d0e7620bd1edf4b9a918d358672609e /clang/lib/StaticAnalyzer/Core
parent57ef3a02e21a8f94d7a9c6d2fa8ea4996d52ea03 (diff)
downloadbcm5719-llvm-6fd5c86d9805bfbe1301cf255a0ce45565c5e28e.tar.gz
bcm5719-llvm-6fd5c86d9805bfbe1301cf255a0ce45565c5e28e.zip
[analyzer] RetainCountChecker: for now, do not trust the summaries of inlined code
Trusting summaries of inlined code would require a more thorough work, as the current approach was causing too many false positives, as the new example in test. The culprit lies in the fact that we currently escape all variables written into a field (but not passed off to unknown functions!), which can result in inconsistent behavior. rdar://45655344 Differential Revision: https://reviews.llvm.org/D53902 llvm-svn: 345746
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core')
-rw-r--r--clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp b/clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp
index efaab64c770..b0e26bae961 100644
--- a/clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp
+++ b/clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp
@@ -101,10 +101,11 @@ static bool isOSObjectRelated(const CXXMethodDecl *MD) {
return true;
for (ParmVarDecl *Param : MD->parameters()) {
- QualType PT = Param->getType();
- if (CXXRecordDecl *RD = PT->getPointeeType()->getAsCXXRecordDecl())
- if (isOSObjectSubclass(RD))
- return true;
+ QualType PT = Param->getType()->getPointeeType();
+ if (!PT.isNull())
+ if (CXXRecordDecl *RD = PT->getAsCXXRecordDecl())
+ if (isOSObjectSubclass(RD))
+ return true;
}
return false;
OpenPOWER on IntegriCloud