From ea4b4aaa64d1d2fe59a21cd73ffc4b1ebae9b6ec Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Mon, 4 May 2009 16:43:50 +0000 Subject: [PATCH] retain checker: Add checker support for FunctionDecl ownership annotations. Need to add Sema support. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70873 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/CFRefCount.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/lib/Analysis/CFRefCount.cpp b/lib/Analysis/CFRefCount.cpp index 59d4845250..711127b79d 100644 --- a/lib/Analysis/CFRefCount.cpp +++ b/lib/Analysis/CFRefCount.cpp @@ -785,6 +785,9 @@ public: void updateSummaryFromAnnotations(RetainSummary &Summ, const ObjCMethodDecl *MD); + void updateSummaryFromAnnotations(RetainSummary &Summ, + const FunctionDecl *FD); + bool isGCEnabled() const { return GCEnabled; } RetainSummary *copySummary(RetainSummary *OldSumm) { @@ -1009,6 +1012,10 @@ RetainSummary* RetainSummaryManager::getSummary(FunctionDecl* FD) { if (!S) S = getDefaultSummary(); + // Annotations override defaults. + assert(S); + updateSummaryFromAnnotations(*S, FD); + FuncSummaries[FD] = S; return S; } @@ -1110,6 +1117,28 @@ RetainSummaryManager::updateSummaryArgEffFromAnnotations(RetainSummary &Summ, Summ.setArgEffect(AF, i, MakeCollectable); } +void +RetainSummaryManager::updateSummaryFromAnnotations(RetainSummary &Summ, + const FunctionDecl *FD) { + if (!FD) + return; + + // Determine if there is a special return effect for this method. + if (isTrackedObjCObjectType(FD->getResultType())) { + if (FD->getAttr()) { + Summ.setRetEffect(isGCEnabled() + ? RetEffect::MakeGCNotOwned() + : RetEffect::MakeOwned(RetEffect::ObjC, true)); + } + } + + // Determine if there are any arguments with a specific ArgEffect. + unsigned i = 0; + for (FunctionDecl::param_const_iterator I = FD->param_begin(), + E = FD->param_end(); I != E; ++I, ++i) + updateSummaryArgEffFromAnnotations(Summ, i, *I); +} + void RetainSummaryManager::updateSummaryFromAnnotations(RetainSummary &Summ, const ObjCMethodDecl *MD) { -- 2.40.0