Fix i386 being able to show member variables correctly by not returning empty objecti...
authorGreg Clayton <gclayton@apple.com>
Fri, 9 Dec 2016 17:54:59 +0000 (17:54 +0000)
committerGreg Clayton <gclayton@apple.com>
Fri, 9 Dec 2016 17:54:59 +0000 (17:54 +0000)
We don't parse ObjC v1 types from the runtime metadata like we do for ObjC v2, but doing so by creating empty types was ruining the i386 v1 debugging experience.

<rdar://problem/24093343>

llvm-svn: 289233

lldb/packages/Python/lldbsuite/test/lang/objc/foundation/TestObjCMethods2.py
lldb/packages/Python/lldbsuite/test/lang/objc/objc-struct-argument/test.m
lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.cpp
lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp

index 2322efe..ce7e774 100644 (file)
@@ -186,6 +186,7 @@ class FoundationTestCase2(TestBase):
                 "be completed."])
         self.runCmd("process continue")
 
+    @expectedFailureAll(archs=["i[3-6]86"], bugnumber="<rdar://problem/28814052>")
     def test_NSError_p(self):
         """Test that p of the result of an unknown method does require a cast."""
         self.build()
index 8bf0ec0..f013c56 100644 (file)
@@ -25,10 +25,10 @@ int main()
     ThingSummer *summer = [ThingSummer alloc];
     struct things_to_sum tts = { 2, 3, 4 };
     int ret = [summer sumThings:tts];
-
     NSRect rect = {{0, 0}, {10, 20}};    
-
-    // Set breakpoint here.
-    return rect.origin.x;
+       // The Objective C V1 runtime won't read types from metadata so we need
+       // NSValue in our debug info to use it in our test.
+       NSValue *v = [NSValue valueWithRect:rect];
+    return rect.origin.x; // Set breakpoint here.
   }
 }
index 6bfd7f7..13bd245 100644 (file)
@@ -435,8 +435,5 @@ void AppleObjCRuntimeV1::UpdateISAToDescriptorMapIfNeeded() {
 }
 
 DeclVendor *AppleObjCRuntimeV1::GetDeclVendor() {
-  if (!m_decl_vendor_ap.get())
-    m_decl_vendor_ap.reset(new AppleObjCDeclVendor(*this));
-
-  return m_decl_vendor_ap.get();
+  return nullptr;
 }
index 16619a7..316115b 100644 (file)
@@ -249,9 +249,8 @@ clang::QualType AppleObjCTypeEncodingParser::BuildObjCObjectPointerType(
     }
 
     DeclVendor *decl_vendor = m_runtime.GetDeclVendor();
-
-    assert(decl_vendor); // how are we parsing type encodings for expressions if
-                         // a type vendor isn't in play?
+    if (!decl_vendor)
+      return clang::QualType();
 
     const bool append = false;
     const uint32_t max_matches = 1;