Further cleanups to isTrackedObjectType().


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69929 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/CFRefCount.cpp b/lib/Analysis/CFRefCount.cpp
index 575a47b..052a610 100644
--- a/lib/Analysis/CFRefCount.cpp
+++ b/lib/Analysis/CFRefCount.cpp
@@ -784,18 +784,22 @@
 // Predicates.
 //===----------------------------------------------------------------------===//
 
-bool RetainSummaryManager::isTrackedObjectType(QualType T) {
-  if (!Ctx.isObjCObjectPointerType(T))
+bool RetainSummaryManager::isTrackedObjectType(QualType Ty) {
+  if (!Ctx.isObjCObjectPointerType(Ty))
     return false;
 
-  // Does it subclass NSObject?
-  ObjCInterfaceType* OT = dyn_cast<ObjCInterfaceType>(T.getTypePtr());
+  // We assume that id<..>, id, and "Class" all represent tracked objects.
+  const PointerType *PT = Ty->getAsPointerType();
+  if (PT == 0)
+    return true;
+    
+  const ObjCInterfaceType *OT = PT->getPointeeType()->getAsObjCInterfaceType();
 
   // We assume that id<..>, id, and "Class" all represent tracked objects.
   if (!OT)
     return true;
-
-  // Does the object type subclass NSObject?
+    
+  // Does the interface subclass NSObject?
   // FIXME: We can memoize here if this gets too expensive.  
   IdentifierInfo* NSObjectII = &Ctx.Idents.get("NSObject");
   ObjCInterfaceDecl* ID = OT->getDecl();