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<IBOutletAttr>() == 0) { // Skip IBOutlets.
containsPointerIvar = true;
break;
}
--- /dev/null
+// 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
+