Teach RetainCountChecker that CFPlugInInstanceCreate does not
return a CF object at all. Fixes <rdar://problem/9566345> llvm-svn: 163362
This commit is contained in:
parent
7e97996f4e
commit
c008db99d7
|
@ -1074,6 +1074,8 @@ RetainSummaryManager::getFunctionSummary(const FunctionDecl *FD) {
|
|||
// The headers on OS X 10.8 use cf_consumed/ns_returns_retained,
|
||||
// but we can fully model NSMakeCollectable ourselves.
|
||||
AllowAnnotations = false;
|
||||
} else if (FName == "CFPlugInInstanceCreate") {
|
||||
S = getPersistentSummary(RetEffect::MakeNoRet());
|
||||
} else if (FName == "IOBSDNameMatching" ||
|
||||
FName == "IOServiceMatching" ||
|
||||
FName == "IOServiceNameMatching" ||
|
||||
|
|
|
@ -303,6 +303,10 @@ extern CGColorSpaceRef CGColorSpaceCreateDeviceRGB(void);
|
|||
// This is how NSMakeCollectable is declared in the OS X 10.8 headers.
|
||||
id NSMakeCollectable(CFTypeRef __attribute__((cf_consumed))) __attribute__((ns_returns_retained));
|
||||
|
||||
typedef const struct __CFUUID * CFUUIDRef;
|
||||
|
||||
extern
|
||||
void *CFPlugInInstanceCreate(CFAllocatorRef allocator, CFUUIDRef factoryUUID, CFUUIDRef typeUUID);
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Test cases.
|
||||
|
@ -1907,3 +1911,11 @@ void test_custom_cf() {
|
|||
MyCFType x = CreateMyCFType(); // expected-warning {{leak of an object stored into 'x'}}
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Test calling CFPlugInInstanceCreate, which appears in CF but doesn't
|
||||
// return a CF object.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void test_CFPlugInInstanceCreate(CFUUIDRef factoryUUID, CFUUIDRef typeUUID) {
|
||||
CFPlugInInstanceCreate(kCFAllocatorDefault, factoryUUID, typeUUID); // no-warning
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue