diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-05-04 15:40:58 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-05-04 15:40:58 +0000 |
commit | 863f68aa0668d3592abf20046395119d27c70b4f (patch) | |
tree | 9a4c403a1190b255185125f810d7549c94d41cb2 /clang/lib | |
parent | df76e6d09d97a95dd9018a930b031739f7f14a8a (diff) | |
download | bcm5719-llvm-863f68aa0668d3592abf20046395119d27c70b4f.tar.gz bcm5719-llvm-863f68aa0668d3592abf20046395119d27c70b4f.zip |
retain checker: Pull out logic for parameter annotations into a
separate method.
llvm-svn: 70870
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Analysis/CFRefCount.cpp | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/clang/lib/Analysis/CFRefCount.cpp b/clang/lib/Analysis/CFRefCount.cpp index 047d9f5844d..59d48452503 100644 --- a/clang/lib/Analysis/CFRefCount.cpp +++ b/clang/lib/Analysis/CFRefCount.cpp @@ -779,6 +779,9 @@ public: RetainSummary* getCommonMethodSummary(const ObjCMethodDecl* MD, Selector S, QualType RetTy); + void updateSummaryArgEffFromAnnotations(RetainSummary &Summ, unsigned i, + const ParmVarDecl *PD); + void updateSummaryFromAnnotations(RetainSummary &Summ, const ObjCMethodDecl *MD); @@ -1092,6 +1095,22 @@ RetainSummaryManager::getInitMethodSummary(QualType RetTy) { void +RetainSummaryManager::updateSummaryArgEffFromAnnotations(RetainSummary &Summ, + unsigned i, + const ParmVarDecl *PD){ + if (PD->getAttr<ObjCOwnershipRetainAttr>()) + Summ.setArgEffect(AF, i, IncRefMsg); + else if (PD->getAttr<ObjCOwnershipCFRetainAttr>()) + Summ.setArgEffect(AF, i, IncRef); + else if (PD->getAttr<ObjCOwnershipReleaseAttr>()) + Summ.setArgEffect(AF, i, DecRefMsg); + else if (PD->getAttr<ObjCOwnershipCFReleaseAttr>()) + Summ.setArgEffect(AF, i, DecRef); + else if (PD->getAttr<ObjCOwnershipMakeCollectableAttr>()) + Summ.setArgEffect(AF, i, MakeCollectable); +} + +void RetainSummaryManager::updateSummaryFromAnnotations(RetainSummary &Summ, const ObjCMethodDecl *MD) { if (!MD) @@ -1109,18 +1128,8 @@ RetainSummaryManager::updateSummaryFromAnnotations(RetainSummary &Summ, // Determine if there are any arguments with a specific ArgEffect. unsigned i = 0; for (ObjCMethodDecl::param_iterator I = MD->param_begin(), - E = MD->param_end(); I != E; ++I, ++i) { - if ((*I)->getAttr<ObjCOwnershipRetainAttr>()) - Summ.setArgEffect(AF, i, IncRefMsg); - else if ((*I)->getAttr<ObjCOwnershipCFRetainAttr>()) - Summ.setArgEffect(AF, i, IncRef); - else if ((*I)->getAttr<ObjCOwnershipReleaseAttr>()) - Summ.setArgEffect(AF, i, DecRefMsg); - else if ((*I)->getAttr<ObjCOwnershipCFReleaseAttr>()) - Summ.setArgEffect(AF, i, DecRef); - else if ((*I)->getAttr<ObjCOwnershipMakeCollectableAttr>()) - Summ.setArgEffect(AF, i, MakeCollectable); - } + E = MD->param_end(); I != E; ++I, ++i) + updateSummaryArgEffFromAnnotations(Summ, i, *I); // Determine any effects on the receiver. if (MD->getAttr<ObjCOwnershipRetainAttr>()) |