From: Ted Kremenek Date: Fri, 24 Oct 2008 21:18:08 +0000 (+0000) Subject: followsFundamentalRule() returns true if "alloc" or "new" appear at the beginning... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5c74d505d59c49c4b558e12f34533f47638ec81b;p=clang followsFundamentalRule() returns true if "alloc" or "new" appear at the beginning of the string, not anywhere within it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58112 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/CFRefCount.cpp b/lib/Analysis/CFRefCount.cpp index 20897acb79..78c9a40eec 100644 --- a/lib/Analysis/CFRefCount.cpp +++ b/lib/Analysis/CFRefCount.cpp @@ -34,8 +34,30 @@ #include using namespace clang; + +//===----------------------------------------------------------------------===// +// Utility functions. +//===----------------------------------------------------------------------===// + using llvm::CStrInCStrNoCase; +// The "fundamental rule" for naming conventions of methods: +// (url broken into two lines) +// http://developer.apple.com/documentation/Cocoa/Conceptual/ +// MemoryMgmt/Tasks/MemoryManagementRules.html +// +// "You take ownership of an object if you create it using a method whose name +// begins with “alloc” or “new” or contains “copy” (for example, alloc, +// newObject, or mutableCopy), or if you send it a retain message. You are +// responsible for relinquishing ownership of objects you own using release +// or autorelease. Any other time you receive an object, you must +// not release it." +// +static bool followsFundamentalRule(const char* s) { + return CStrInCStrNoCase(s, "create") || CStrInCStrNoCase(s, "copy") || + CStrInCStrNoCase(s, "new") == s || CStrInCStrNoCase(s, "alloc") == s; +} + //===----------------------------------------------------------------------===// // Selector creation functions. //===----------------------------------------------------------------------===// @@ -1834,22 +1856,6 @@ void CFRefCount::EvalStore(ExplodedNodeSet& Dst, // End-of-path. -// The "fundamental rule" for naming conventions of methods: -// (url broken into two lines) -// http://developer.apple.com/documentation/Cocoa/Conceptual/ -// MemoryMgmt/Tasks/MemoryManagementRules.html -// -// "You take ownership of an object if you create it using a method whose name -// begins with “alloc” or “new” or contains “copy” (for example, alloc, -// newObject, or mutableCopy), or if you send it a retain message. You are -// responsible for relinquishing ownership of objects you own using release -// or autorelease. Any other time you receive an object, you must -// not release it." -// -static bool followsFundamentalRule(const char* s) { - return CStrInCStrNoCase(s, "create") || CStrInCStrNoCase(s, "copy") || - CStrInCStrNoCase(s, "new"); -} std::pair CFRefCount::HandleSymbolDeath(GRStateManager& VMgr,