diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Analysis/CFRefCount.cpp | 13 | ||||
-rw-r--r-- | lib/Parse/AttributeList.cpp | 2 |
2 files changed, 13 insertions, 2 deletions
diff --git a/lib/Analysis/CFRefCount.cpp b/lib/Analysis/CFRefCount.cpp index 9080e66876..bb957b89f5 100644 --- a/lib/Analysis/CFRefCount.cpp +++ b/lib/Analysis/CFRefCount.cpp @@ -1095,7 +1095,18 @@ RetainSummaryManager::getMethodSummaryFromAnnotations(ObjCMethodDecl *MD) { } } - if (!hasRetEffect) + // Determine if there are any arguments with a specific ArgEffect. + bool hasArgEffect = false; + unsigned i = 0; + for (ObjCMethodDecl::param_iterator I = MD->param_begin(), + E = MD->param_end(); I != E; ++I, ++i) { + if ((*I)->getAttr<ObjCOwnershipRetainAttr>()) { + ScratchArgs.push_back(std::make_pair(i, IncRefMsg)); + hasArgEffect = true; + } +} + + if (!hasRetEffect && !hasArgEffect) return 0; return getPersistentSummary(RE); diff --git a/lib/Parse/AttributeList.cpp b/lib/Parse/AttributeList.cpp index a205c0468a..8048db887d 100644 --- a/lib/Parse/AttributeList.cpp +++ b/lib/Parse/AttributeList.cpp @@ -135,7 +135,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo *Name) { break; case 21: if (!memcmp(Str, "objc_ownership_retain", 21)) - return AT_objc_ownership_returns; + return AT_objc_ownership_retain; case 22: if (!memcmp(Str, "objc_ownership_returns", 22)) return AT_objc_ownership_returns; |