[analyzer] -drain is not an alias for -release.

This was previously added to support -[NSAutoreleasePool drain], which
behaves like -release under non-GC and "please collect" under GC. We're
not currently modeling the autorelease pool stack, though, so we can
just take this out entirely.

Fixes PR14927.

llvm-svn: 172444
This commit is contained in:
Jordan Rose 2013-01-14 18:58:33 +00:00
parent d7931f7047
commit cb6a721920
2 changed files with 15 additions and 4 deletions

View File

@ -1570,10 +1570,6 @@ void RetainSummaryManager::InitializeMethodSummaries() {
Summ = getPersistentSummary(NoRet, DecRefMsg);
addNSObjectMethSummary(GetNullarySelector("release", Ctx), Summ);
// Create the "drain" selector.
Summ = getPersistentSummary(NoRet, isGCEnabled() ? DoNothing : DecRef);
addNSObjectMethSummary(GetNullarySelector("drain", Ctx), Summ);
// Create the -dealloc summary.
Summ = getPersistentSummary(NoRet, Dealloc);
addNSObjectMethSummary(GetNullarySelector("dealloc", Ctx), Summ);

View File

@ -1938,6 +1938,21 @@ void test_CFPlugInInstanceCreate(CFUUIDRef factoryUUID, CFUUIDRef typeUUID) {
CFPlugInInstanceCreate(kCFAllocatorDefault, factoryUUID, typeUUID); // no-warning
}
//===----------------------------------------------------------------------===//
// PR14927: -drain only has retain-count semantics on NSAutoreleasePool.
//===----------------------------------------------------------------------===//
@interface PR14927 : NSObject
- (void)drain;
@end
void test_drain() {
PR14927 *obj = [[PR14927 alloc] init];
[obj drain];
[obj release]; // no-warning
}
// CHECK: <key>diagnostics</key>
// CHECK-NEXT: <array>
// CHECK-NEXT: <dict>