From 5fde9ebc2618961056b9b5c9528b1fa013c5525b Mon Sep 17 00:00:00 2001 From: George Karpenkov Date: Fri, 30 Nov 2018 02:18:10 +0000 Subject: [PATCH] [analyzer] For OSObject, trust that functions starting with Get (uppercase) are also getters. Differential Revision: https://reviews.llvm.org/D55035 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@347945 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/StaticAnalyzer/Core/RetainSummaryManager.cpp | 4 +++- test/Analysis/osobject-retain-release.cpp | 11 +++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp b/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp index 2fb0d754d9..cbaee85beb 100644 --- a/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp +++ b/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp @@ -241,7 +241,9 @@ RetainSummaryManager::generateSummary(const FunctionDecl *FD, // All objects returned with functions *not* starting with // get, or iterators, are returned at +1. - if (!II->getName().startswith("get") || isOSIteratorSubclass(PD)) { + if ((!II->getName().startswith("get") && + !II->getName().startswith("Get")) || + isOSIteratorSubclass(PD)) { return getOSSummaryCreateRule(FD); } else { return getOSSummaryGetRule(FD); diff --git a/test/Analysis/osobject-retain-release.cpp b/test/Analysis/osobject-retain-release.cpp index 6b31632b03..3720f04e05 100644 --- a/test/Analysis/osobject-retain-release.cpp +++ b/test/Analysis/osobject-retain-release.cpp @@ -20,6 +20,9 @@ struct OSObject { static OSObject *generateObject(int); + static OSObject *getObject(); + static OSObject *GetObject(); + static const OSMetaClass * const metaClass; }; @@ -55,6 +58,14 @@ struct OSMetaClassBase { static OSObject *safeMetaCast(const OSObject *inst, const OSMetaClass *meta); }; +void check_get_object() { + OSObject::getObject(); +} + +void check_Get_object() { + OSObject::GetObject(); +} + void check_custom_iterator_rule(OSArray *arr) { OSIterator *it = arr->getIterator(); it->release(); -- 2.40.0