Author: kremenek Date: Mon May 18 18:14:34 2009 New Revision: 72065 URL: http://llvm.org/viewvc/llvm-project?rev=72065&view=rev Log: Fix PR 4230: Don't flag leaks of NSAutoreleasePools until we know that we aren' at the top-most scope of autorelease pools.
Modified: cfe/trunk/lib/Analysis/CFRefCount.cpp cfe/trunk/test/Analysis/retain-release.m Modified: cfe/trunk/lib/Analysis/CFRefCount.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/CFRefCount.cpp?rev=72065&r1=72064&r2=72065&view=diff ============================================================================== --- cfe/trunk/lib/Analysis/CFRefCount.cpp (original) +++ cfe/trunk/lib/Analysis/CFRefCount.cpp Mon May 18 18:14:34 2009 @@ -1438,6 +1438,10 @@ addInstMethSummary("NSPanel", NoTrackYet, "initWithContentRect", "styleMask", "backing", "defer", "screen", NULL); #endif + + // Don't track allocated autorelease pools yet, as it is okay to prematurely + // exit a method. + addClassMethSummary("NSAutoreleasePool", "alloc", NoTrackYet); // Create NSAssertionHandler summaries. addPanicSummary("NSAssertionHandler", "handleFailureInFunction", "file", Modified: cfe/trunk/test/Analysis/retain-release.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/retain-release.m?rev=72065&r1=72064&r2=72065&view=diff ============================================================================== --- cfe/trunk/test/Analysis/retain-release.m (original) +++ cfe/trunk/test/Analysis/retain-release.m Mon May 18 18:14:34 2009 @@ -619,6 +619,18 @@ } //===----------------------------------------------------------------------===// +// PR 4230 - an autorelease pool is not necessarily leaked during a premature +// return +//===----------------------------------------------------------------------===// + +static void PR4230(void) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // no-warning + NSString *object = [[[NSString alloc] init] autorelease]; // no-warning + return; +} + +//===----------------------------------------------------------------------===// // Method name that has a null IdentifierInfo* for its first selector slot. // This test just makes sure that we handle it. //===----------------------------------------------------------------------===// _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits