Do not emit a "missing -dealloc" warning if a class contains no ivars that are pointers.
This patch aims to address some of the concerns of PR 2517: http://llvm.org/bugs/show_bug.cgi?id=2517


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@53168 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/CheckObjCDealloc.cpp b/lib/Analysis/CheckObjCDealloc.cpp
index 1f62721..7a2a0b6 100644
--- a/lib/Analysis/CheckObjCDealloc.cpp
+++ b/lib/Analysis/CheckObjCDealloc.cpp
@@ -48,11 +48,27 @@
   
   ASTContext& Ctx = BR.getContext();
   ObjCInterfaceDecl* ID = D->getClassInterface();
+    
+  // Does the class contain any ivars that are pointers (or id<...>)?
+  // If not, skip the check entirely.
+  // NOTE: This is motivated by PR 2517:
+  //        http://llvm.org/bugs/show_bug.cgi?id=2517
   
-  // Does the class contain any ivars?  If not, skip the check entirely.
+  bool containsPointerIvar = false;
   
-  if (ID->ivar_empty())
-    return;  
+  for (ObjCInterfaceDecl::ivar_iterator I=ID->ivar_begin(), E=ID->ivar_end();
+       I!=E; ++I) {
+    
+    QualType T = (*I)->getType();
+    
+    if (T->isPointerType() || T->isObjCQualifiedIdType()) {
+      containsPointerIvar = true;
+      break;
+    }
+  }
+  
+  if (!containsPointerIvar)
+    return;
   
   // Determine if the class subclasses NSObject.
   IdentifierInfo* NSObjectII = &Ctx.Idents.get("NSObject");