From 2855a93f0711604a31c00da94e1251bf1a30dfa0 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Wed, 5 Nov 2008 16:54:44 +0000 Subject: initXXX methods can return owned objects llvm-svn: 58758 --- clang/lib/Analysis/CFRefCount.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'clang') diff --git a/clang/lib/Analysis/CFRefCount.cpp b/clang/lib/Analysis/CFRefCount.cpp index 80c6bf95324..1a38d957eb1 100644 --- a/clang/lib/Analysis/CFRefCount.cpp +++ b/clang/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(CD)) { std::string s = MD->getSelector().getName(); - if (!followsFundamentalRule(s.c_str())) { + if (!followsReturnRule(s.c_str())) { hasLeak = true; state = state.set(sid, V ^ RefVal::ErrorLeakReturned); return std::make_pair(state, true); -- cgit v1.2.3