forked from OSchip/llvm-project
analyzer, retain/release checker: Remove hack where objects passed in message to 'self' are no longer tracked.
llvm-svn: 125130
This commit is contained in:
parent
c6236065b7
commit
1953f97ac9
|
@ -1385,24 +1385,6 @@ RetainSummaryManager::getInstanceMethodSummary(const ObjCMessage &msg,
|
|||
// FIXME: The receiver could be a reference to a class, meaning that
|
||||
// we should use the class method.
|
||||
RetainSummary *Summ = getInstanceMethodSummary(msg, ID);
|
||||
|
||||
// Special-case: are we sending a mesage to "self"?
|
||||
// This is a hack. When we have full-IP this should be removed.
|
||||
if (isa<ObjCMethodDecl>(LC->getDecl()) && Receiver) {
|
||||
if (const loc::MemRegionVal *L = dyn_cast<loc::MemRegionVal>(&receiverV)) {
|
||||
// Get the region associated with 'self'.
|
||||
if (const ImplicitParamDecl *SelfDecl = LC->getSelfDecl()) {
|
||||
SVal SelfVal = state->getSVal(state->getRegion(SelfDecl, LC));
|
||||
if (L->StripCasts() == SelfVal.getAsRegion()) {
|
||||
// Update the summary to make the default argument effect
|
||||
// 'StopTracking'.
|
||||
Summ = copySummary(Summ);
|
||||
Summ->setDefaultArgEffect(StopTracking);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Summ ? Summ : getDefaultSummary();
|
||||
}
|
||||
|
||||
|
|
|
@ -30,7 +30,9 @@ typedef signed char BOOL;
|
|||
}
|
||||
- (NSURL *)myMethod:(NSString *)inString;
|
||||
- (NSURL *)getMethod:(NSString*)inString;
|
||||
- (void)addObject:(id)X;
|
||||
- (NSURL *)getMethod2:(NSString*)inString;
|
||||
- (void)addObject:(id) __attribute__((ns_consumed)) X;
|
||||
- (void)addObject2:(id) X;
|
||||
@end
|
||||
|
||||
@implementation MyClass
|
||||
|
@ -48,6 +50,13 @@ typedef signed char BOOL;
|
|||
return url; // no-warning
|
||||
}
|
||||
|
||||
- (NSURL *)getMethod2:(NSString *)inString
|
||||
{
|
||||
NSURL *url = (NSURL *)CFURLCreateWithString(0, (CFStringRef)inString, 0); // expected-warning{{leak}}
|
||||
[self addObject2:url];
|
||||
return url;
|
||||
}
|
||||
|
||||
void testNames(NamingTest* x) {
|
||||
[x copyPhoto]; // expected-warning{{leak}}
|
||||
[x mutableCopyPhoto]; // expected-warning{{leak}}
|
||||
|
@ -67,4 +76,10 @@ void testNames(NamingTest* x) {
|
|||
myObject = X;
|
||||
}
|
||||
|
||||
- (void)addObject2:(id)X
|
||||
{
|
||||
myObject = X;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
|
Loading…
Reference in New Issue