forked from OSchip/llvm-project
Tweak the retain/release checker to not stop tracking retained objects when calling C++ methods. This is a temporary solution to prune false positives until we have a general story using annotations.
llvm-svn: 130726
This commit is contained in:
parent
d5c45f6738
commit
e9f364f658
|
@ -930,6 +930,13 @@ RetainSummary* RetainSummaryManager::getSummary(const FunctionDecl* FD) {
|
|||
S = getPersistentStopSummary();
|
||||
break;
|
||||
}
|
||||
// For C++ methods, generate an implicit "stop" summary as well. We
|
||||
// can relax this once we have a clear policy for C++ methods and
|
||||
// ownership attributes.
|
||||
if (isa<CXXMethodDecl>(FD)) {
|
||||
S = getPersistentStopSummary();
|
||||
break;
|
||||
}
|
||||
|
||||
// [PR 3337] Use 'getAs<FunctionType>' to strip away any typedefs on the
|
||||
// function's type.
|
||||
|
|
|
@ -275,10 +275,32 @@ class SmartPointer {
|
|||
public:
|
||||
SmartPointer(id x) : x(x) {}
|
||||
~SmartPointer() { [x release]; }
|
||||
|
||||
void adopt(id x);
|
||||
void noAdopt(id x);
|
||||
};
|
||||
|
||||
void test_positive() {
|
||||
id x = [[NSObject alloc] init]; // expected-warning {{leak}}
|
||||
}
|
||||
|
||||
void test_smartpointer_1() {
|
||||
id x = [[NSObject alloc] init]; // no-warning
|
||||
SmartPointer foo(x);
|
||||
}
|
||||
|
||||
void test_smartpointer_2() {
|
||||
id x = [[NSObject alloc] init]; // no-warning
|
||||
SmartPointer foo(0);
|
||||
foo.adopt(x);
|
||||
}
|
||||
|
||||
// FIXME: Eventually we want annotations to say whether or not
|
||||
// a C++ method claims ownership of an Objective-C object.
|
||||
void test_smartpointer_3() {
|
||||
id x = [[NSObject alloc] init]; // no-warning
|
||||
SmartPointer foo(0);
|
||||
foo.noAdopt(x);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue