summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Analysis/CheckObjCDealloc.cpp6
-rw-r--r--clang/test/Analysis/IBOutlet.m20
2 files changed, 24 insertions, 2 deletions
diff --git a/clang/lib/Analysis/CheckObjCDealloc.cpp b/clang/lib/Analysis/CheckObjCDealloc.cpp
index 0c9100951ce..7bb0015462b 100644
--- a/clang/lib/Analysis/CheckObjCDealloc.cpp
+++ b/clang/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<IBOutletAttr>() == 0) { // Skip IBOutlets.
containsPointerIvar = true;
break;
}
diff --git a/clang/test/Analysis/IBOutlet.m b/clang/test/Analysis/IBOutlet.m
new file mode 100644
index 00000000000..4049e795547
--- /dev/null
+++ b/clang/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
+
OpenPOWER on IntegriCloud