зеркало из https://github.com/microsoft/clang-1.git
Fix PR 4230: Don't flag leaks of NSAutoreleasePools until we know that we aren' at the top-most scope of autorelease pools.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72065 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
2aa39cd55c
Коммит
ba67f6aa95
|
@ -1438,6 +1438,10 @@ void RetainSummaryManager::InitializeMethodSummaries() {
|
||||||
addInstMethSummary("NSPanel", NoTrackYet, "initWithContentRect",
|
addInstMethSummary("NSPanel", NoTrackYet, "initWithContentRect",
|
||||||
"styleMask", "backing", "defer", "screen", NULL);
|
"styleMask", "backing", "defer", "screen", NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Don't track allocated autorelease pools yet, as it is okay to prematurely
|
||||||
|
// exit a method.
|
||||||
|
addClassMethSummary("NSAutoreleasePool", "alloc", NoTrackYet);
|
||||||
|
|
||||||
// Create NSAssertionHandler summaries.
|
// Create NSAssertionHandler summaries.
|
||||||
addPanicSummary("NSAssertionHandler", "handleFailureInFunction", "file",
|
addPanicSummary("NSAssertionHandler", "handleFailureInFunction", "file",
|
||||||
|
|
|
@ -618,6 +618,18 @@ void test_RDar6859457(RDar6859457 *x, void *bytes, NSUInteger dataLength) {
|
||||||
[NSData dataWithBytesNoCopy:bytes length:dataLength freeWhenDone:1]; // no-warning
|
[NSData dataWithBytesNoCopy:bytes length:dataLength freeWhenDone:1]; // no-warning
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// 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.
|
// Method name that has a null IdentifierInfo* for its first selector slot.
|
||||||
// This test just makes sure that we handle it.
|
// This test just makes sure that we handle it.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче