From: Ted Kremenek Date: Tue, 15 Jul 2008 23:04:27 +0000 (+0000) Subject: For the MissingDealloc check, don't treat IBOutlet ivars as being needed to be released X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f4ebf42b06994a14a218898ce9a6c3f3bfbc7a57;p=clang For the MissingDealloc check, don't treat IBOutlet ivars as being needed to be released git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53647 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/CheckObjCDealloc.cpp b/lib/Analysis/CheckObjCDealloc.cpp index 0c9100951c..7bb0015462 100644 --- a/lib/Analysis/CheckObjCDealloc.cpp +++ b/lib/Analysis/CheckObjCDealloc.cpp @@ -60,9 +60,11 @@ void clang::CheckObjCDealloc(ObjCImplementationDecl* D, for (ObjCInterfaceDecl::ivar_iterator I=ID->ivar_begin(), E=ID->ivar_end(); I!=E; ++I) { - QualType T = (*I)->getType(); + ObjCIvarDecl* ID = *I; + QualType T = ID->getType(); - if (T->isPointerType() || T->isObjCQualifiedIdType()) { + if ((T->isPointerType() || T->isObjCQualifiedIdType()) && + ID->getAttr() == 0) { // Skip IBOutlets. containsPointerIvar = true; break; } diff --git a/test/Analysis/IBOutlet.m b/test/Analysis/IBOutlet.m new file mode 100644 index 0000000000..4049e79554 --- /dev/null +++ b/test/Analysis/IBOutlet.m @@ -0,0 +1,20 @@ +// RUN: clang -warn-objc-missing-dealloc '-DIBOutlet=__attribute__((iboutlet))' %s --verify + +#ifndef IBOutlet +#define IBOutlet +#endif + +@class NSWindow; + +@interface NSObject {} +- (void)dealloc; +@end + +@interface A : NSObject { +IBOutlet NSWindow *window; +} +@end + +@implementation A // no-warning +@end +