diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp index dac93931bab1..cc0c9e728964 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 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 000000000000..f6f336c01bbc --- /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 000000000000..a352259954ef --- /dev/null +++ b/lldb/test/API/lang/objc/class-without-methods/Point.h @@ -0,0 +1,4 @@ +#import + +@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 000000000000..770a857c80dc --- /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 000000000000..f83b0352bf1a --- /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 000000000000..0b6e14371bc5 --- /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; +}