Added the ability to dereference an Objective-C object
pointer to make the result of an expression.  LLDB now
dumps the ivars of the Objective-C object and all of
its parents.  This just required fixing a bug where we
didn't distinguish between Objective-C object pointers
and regular C-style pointers.

Also added a testcase to verify that this continues to
work.


git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@146164 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Expression/IRForTarget.cpp b/source/Expression/IRForTarget.cpp
index 4cf8d79..3722f34 100644
--- a/source/Expression/IRForTarget.cpp
+++ b/source/Expression/IRForTarget.cpp
@@ -631,9 +631,25 @@
     {
         clang::QualType pointer_qual_type = result_var->getType();
         const clang::Type *pointer_type = pointer_qual_type.getTypePtr();
-        const clang::PointerType *pointer_pointertype = dyn_cast<clang::PointerType>(pointer_type);
         
-        if (!pointer_pointertype)
+        const clang::PointerType *pointer_pointertype = dyn_cast<clang::PointerType>(pointer_type);
+        const clang::ObjCObjectPointerType *pointer_objcobjpointertype = dyn_cast<clang::ObjCObjectPointerType>(pointer_type);
+        
+        if (pointer_pointertype)
+        {
+            clang::QualType element_qual_type = pointer_pointertype->getPointeeType();
+            
+            m_result_type = lldb_private::TypeFromParser(element_qual_type.getAsOpaquePtr(),
+                                                         &result_decl->getASTContext());
+        }
+        else if (pointer_objcobjpointertype)
+        {
+            clang::QualType element_qual_type = clang::QualType(pointer_objcobjpointertype->getObjectType(), 0);
+            
+            m_result_type = lldb_private::TypeFromParser(element_qual_type.getAsOpaquePtr(),
+                                                         &result_decl->getASTContext());
+        }
+        else
         {
             if (log)
                 log->PutCString("Expected result to have pointer type, but it did not");
@@ -643,11 +659,6 @@
             
             return false;
         }
-        
-        clang::QualType element_qual_type = pointer_pointertype->getPointeeType();
-        
-        m_result_type = lldb_private::TypeFromParser(element_qual_type.getAsOpaquePtr(),
-                                                     &result_decl->getASTContext());
     }
     else
     {