From: George Karpenkov Date: Thu, 10 Jan 2019 18:14:38 +0000 (+0000) Subject: [analyzer] [RetainCountChecker] Remove redundant enum UnarySummaryKind X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a8a2d77577f444f69f48b356e0616cc19887b2d1;p=clang [analyzer] [RetainCountChecker] Remove redundant enum UnarySummaryKind Differential Revision: https://reviews.llvm.org/D56072 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@350861 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/StaticAnalyzer/Core/RetainSummaryManager.h b/include/clang/StaticAnalyzer/Core/RetainSummaryManager.h index e03a17067c..809789c231 100644 --- a/include/clang/StaticAnalyzer/Core/RetainSummaryManager.h +++ b/include/clang/StaticAnalyzer/Core/RetainSummaryManager.h @@ -537,10 +537,8 @@ class RetainSummaryManager { /// Free the OS object. const RetainSummary *getOSSummaryFreeRule(const FunctionDecl *FD); - enum UnaryFuncKind { cfretain, cfrelease, cfautorelease, cfmakecollectable }; - const RetainSummary *getUnarySummary(const FunctionType* FT, - UnaryFuncKind func); + ArgEffectKind AE); const RetainSummary *getCFSummaryCreateRule(const FunctionDecl *FD); const RetainSummary *getCFSummaryGetRule(const FunctionDecl *FD); diff --git a/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp b/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp index 6f0a71bdd7..51fa760ab5 100644 --- a/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp +++ b/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp @@ -194,7 +194,7 @@ const RetainSummary *RetainSummaryManager::getSummaryForObjCOrCFObject( } else if(FName == "NSMakeCollectable") { // Handle: id NSMakeCollectable(CFTypeRef) AllowAnnotations = false; - return RetTy->isObjCIdType() ? getUnarySummary(FT, cfmakecollectable) + return RetTy->isObjCIdType() ? getUnarySummary(FT, DoNothing) : getPersistentStopSummary(); } else if (FName == "CMBufferQueueDequeueAndRetain" || FName == "CMBufferQueueDequeueIfDataReadyAndRetain") { @@ -307,16 +307,16 @@ const RetainSummary *RetainSummaryManager::getSummaryForObjCOrCFObject( // We want to ignore such annotation. AllowAnnotations = false; - return getUnarySummary(FT, cfretain); + return getUnarySummary(FT, IncRef); } else if (isAutorelease(FD, FName)) { // The headers use cf_consumed, but we can fully model CFAutorelease // ourselves. AllowAnnotations = false; - return getUnarySummary(FT, cfautorelease); + return getUnarySummary(FT, Autorelease); } else if (isMakeCollectable(FName)) { AllowAnnotations = false; - return getUnarySummary(FT, cfmakecollectable); + return getUnarySummary(FT, DoNothing); } else { return getCFCreateGetRuleSummary(FD); } @@ -326,7 +326,7 @@ const RetainSummary *RetainSummaryManager::getSummaryForObjCOrCFObject( if (cocoa::isRefType(RetTy, "CG", FName) || cocoa::isRefType(RetTy, "CV", FName)) { if (isRetain(FD, FName)) - return getUnarySummary(FT, cfretain); + return getUnarySummary(FT, IncRef); else return getCFCreateGetRuleSummary(FD); } @@ -350,7 +350,7 @@ const RetainSummary *RetainSummaryManager::getSummaryForObjCOrCFObject( FName = FName.substr(FName.startswith("CGCF") ? 4 : 2); if (isRelease(FD, FName)) - return getUnarySummary(FT, cfrelease); + return getUnarySummary(FT, DecRef); else { assert(ScratchArgs.isEmpty()); // Remaining CoreFoundation and CoreGraphics functions. @@ -644,11 +644,9 @@ RetainSummaryManager::canEval(const CallExpr *CE, const FunctionDecl *FD, return None; } -// TODO: UnaryFuncKind is a very funny enum, it really should not exist: -// just pass the needed effect directly! const RetainSummary * RetainSummaryManager::getUnarySummary(const FunctionType* FT, - UnaryFuncKind func) { + ArgEffectKind AE) { // Unary functions have no arg effects by definition. ArgEffects ScratchArgs(AF.getEmptyMap()); @@ -659,13 +657,7 @@ RetainSummaryManager::getUnarySummary(const FunctionType* FT, if (!FTP || FTP->getNumParams() != 1) return getPersistentStopSummary(); - ArgEffect Effect(DoNothing, ObjKind::CF); - switch (func) { - case cfretain: Effect = Effect.withKind(IncRef); break; - case cfrelease: Effect = Effect.withKind(DecRef); break; - case cfautorelease: Effect = Effect.withKind(Autorelease); break; - case cfmakecollectable: Effect = Effect.withKind(DoNothing); break; - } + ArgEffect Effect(AE, ObjKind::CF); ScratchArgs = AF.add(ScratchArgs, 0, Effect); return getPersistentSummary(RetEffect::MakeNoRet(),