Author: Dave Lee
Date: 2025-06-24T10:58:06-07:00
New Revision: 23b0564800f6308ae4b54f0fbf60759ab8f7eb80

URL: 
https://github.com/llvm/llvm-project/commit/23b0564800f6308ae4b54f0fbf60759ab8f7eb80
DIFF: 
https://github.com/llvm/llvm-project/commit/23b0564800f6308ae4b54f0fbf60759ab8f7eb80.diff

LOG: [lldb] Fix AppleObjCDeclVendor for classes which have no methods (#145452)

Fix the rare case where an ObjC class has ivars but no methods. The fix is to 
not early
return when a class has no method list.

Added: 
    lldb/test/API/lang/objc/class-without-methods/Makefile
    lldb/test/API/lang/objc/class-without-methods/Point.h
    lldb/test/API/lang/objc/class-without-methods/Point.m
    lldb/test/API/lang/objc/class-without-methods/TestObjCClassWithoutMethods.py
    lldb/test/API/lang/objc/class-without-methods/main.m

Modified: 
    
lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp

Removed: 
    


################################################################################
diff  --git 
a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp
 
b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp
index dac93931bab1b..cc0c9e728964e 100644
--- 
a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp
+++ 
b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp
@@ -552,9 +552,8 @@ bool ClassDescriptorV2::Describe(
     } else {
       std::optional<method_list_t> base_method_list =
           GetMethodList(process, class_ro->m_baseMethods_ptr);
-      if (!base_method_list)
-        return false;
-      if (!ProcessMethodList(instance_method_func, *base_method_list))
+      if (base_method_list &&
+          !ProcessMethodList(instance_method_func, *base_method_list))
         return false;
     }
   }

diff  --git a/lldb/test/API/lang/objc/class-without-methods/Makefile 
b/lldb/test/API/lang/objc/class-without-methods/Makefile
new file mode 100644
index 0000000000000..f6f336c01bbc5
--- /dev/null
+++ b/lldb/test/API/lang/objc/class-without-methods/Makefile
@@ -0,0 +1,5 @@
+OBJC_SOURCES := Point.m main.m
+include Makefile.rules
+
+# Only objc metadata, no debug info, for Point.m
+Point.o: CFLAGS_EXTRAS += -g0

diff  --git a/lldb/test/API/lang/objc/class-without-methods/Point.h 
b/lldb/test/API/lang/objc/class-without-methods/Point.h
new file mode 100644
index 0000000000000..a352259954eff
--- /dev/null
+++ b/lldb/test/API/lang/objc/class-without-methods/Point.h
@@ -0,0 +1,4 @@
+#import <objc/NSObject.h>
+
+@interface Point : NSObject
+@end

diff  --git a/lldb/test/API/lang/objc/class-without-methods/Point.m 
b/lldb/test/API/lang/objc/class-without-methods/Point.m
new file mode 100644
index 0000000000000..770a857c80dc7
--- /dev/null
+++ b/lldb/test/API/lang/objc/class-without-methods/Point.m
@@ -0,0 +1,7 @@
+#import "Point.h"
+
+@implementation Point {
+  float _x;
+  float _y;
+}
+@end

diff  --git 
a/lldb/test/API/lang/objc/class-without-methods/TestObjCClassWithoutMethods.py 
b/lldb/test/API/lang/objc/class-without-methods/TestObjCClassWithoutMethods.py
new file mode 100644
index 0000000000000..f83b0352bf1a9
--- /dev/null
+++ 
b/lldb/test/API/lang/objc/class-without-methods/TestObjCClassWithoutMethods.py
@@ -0,0 +1,11 @@
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class TestCase(TestBase):
+    def test(self):
+        self.build()
+        lldbutil.run_to_source_breakpoint(self, "break here", 
lldb.SBFileSpec("main.m"))
+        self.expect("frame var -P1 p", substrs=["_x = 0", "_y = 0"])

diff  --git a/lldb/test/API/lang/objc/class-without-methods/main.m 
b/lldb/test/API/lang/objc/class-without-methods/main.m
new file mode 100644
index 0000000000000..0b6e14371bc59
--- /dev/null
+++ b/lldb/test/API/lang/objc/class-without-methods/main.m
@@ -0,0 +1,7 @@
+#import "Point.h"
+
+int main() {
+  Point *p = [Point new];
+  // break here
+  return 0;
+}


        
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to