Author: dergachev Date: Thu Mar 14 17:26:17 2019 New Revision: 356223 URL: http://llvm.org/viewvc/llvm-project?rev=356223&view=rev Log: [analyzer] RetainCount: A function isn't a CFRetain if it takes no arguments.
Don't crash when a function has a name that starts with "CF" and ends with "Retain" but takes 0 arguments. In particular, don't try to treat it as if it returns its first argument. These problems are inevitable because the checker is naming-convention-based, but at least we shouldn't crash. Differential Revision: https://reviews.llvm.org/D59123 Modified: cfe/trunk/lib/Analysis/RetainSummaryManager.cpp cfe/trunk/test/Analysis/retain-release.mm Modified: cfe/trunk/lib/Analysis/RetainSummaryManager.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/RetainSummaryManager.cpp?rev=356223&r1=356222&r2=356223&view=diff ============================================================================== --- cfe/trunk/lib/Analysis/RetainSummaryManager.cpp (original) +++ cfe/trunk/lib/Analysis/RetainSummaryManager.cpp Thu Mar 14 17:26:17 2019 @@ -722,12 +722,13 @@ RetainSummaryManager::canEval(const Call // These are not retain. They just return something and retain it. return None; } - if (cocoa::isRefType(ResultTy, "CF", FName) || - cocoa::isRefType(ResultTy, "CG", FName) || - cocoa::isRefType(ResultTy, "CV", FName)) - if (isRetain(FD, FName) || isAutorelease(FD, FName) || - isMakeCollectable(FName)) - return BehaviorSummary::Identity; + if (CE->getNumArgs() == 1 && + (cocoa::isRefType(ResultTy, "CF", FName) || + cocoa::isRefType(ResultTy, "CG", FName) || + cocoa::isRefType(ResultTy, "CV", FName)) && + (isRetain(FD, FName) || isAutorelease(FD, FName) || + isMakeCollectable(FName))) + return BehaviorSummary::Identity; // safeMetaCast is called by OSDynamicCast. // We assume that OSDynamicCast is either an identity (cast is OK, Modified: cfe/trunk/test/Analysis/retain-release.mm URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/retain-release.mm?rev=356223&r1=356222&r2=356223&view=diff ============================================================================== --- cfe/trunk/test/Analysis/retain-release.mm (original) +++ cfe/trunk/test/Analysis/retain-release.mm Thu Mar 14 17:26:17 2019 @@ -503,3 +503,15 @@ void test_cxx_method_escaping(S *s) { } } + +namespace yet_another_unexpected_signature_crash { + +CFTypeRef CFSomethingSomethingRetain(); +CFTypeRef CFSomethingSomethingAutorelease(); + +void foo() { + CFSomethingSomethingRetain(); // no-crash + CFSomethingSomethingAutorelease(); // no-crash +} + +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits