diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-11-05 16:54:44 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-11-05 16:54:44 +0000 |
commit | 4c79e55951517e9b3c06d0b7ac4bd82320f43f4b (patch) | |
tree | 44397117f58699e97b442fc4b48cd1712d3265d5 | |
parent | 64bffa9a6f40e5a3d5556f994f09f7bf45eecd4c (diff) |
initXXX methods can return owned objects
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58758 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Analysis/CFRefCount.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/Analysis/CFRefCount.cpp b/lib/Analysis/CFRefCount.cpp index 80c6bf9532..1a38d957eb 100644 --- a/lib/Analysis/CFRefCount.cpp +++ b/lib/Analysis/CFRefCount.cpp @@ -57,7 +57,12 @@ static bool followsFundamentalRule(const char* s) { while (*s == '_') ++s; return CStrInCStrNoCase(s, "create") || CStrInCStrNoCase(s, "copy") || CStrInCStrNoCase(s, "new") == s || CStrInCStrNoCase(s, "alloc") == s; -} +} + +static bool followsReturnRule(const char* s) { + while (*s == '_') ++s; + return followsFundamentalRule(s) || CStrInCStrNoCase(s, "init") == s; +} //===----------------------------------------------------------------------===// // Selector creation functions. @@ -1878,7 +1883,7 @@ CFRefCount::HandleSymbolDeath(GRStateManager& VMgr, if (V.isReturnedOwned() && V.getCount() == 0) if (const ObjCMethodDecl* MD = dyn_cast<ObjCMethodDecl>(CD)) { std::string s = MD->getSelector().getName(); - if (!followsFundamentalRule(s.c_str())) { + if (!followsReturnRule(s.c_str())) { hasLeak = true; state = state.set<RefBindings>(sid, V ^ RefVal::ErrorLeakReturned); return std::make_pair(state, true); |