Files
llvm-project/lldb/test/Shell/Expr/TestObjCIncompleteSuperclass.test
Michael Buch 3aea01b271 [lldb][DWARFASTParserClang] RequireCompleteType for ObjC types (#176765)
Currently we forcefully complete C++ types if we can't find their
definition for layout purposes. This ensures that we at least don't
crash in Clang when laying out the type. The definition is required for
types of members/array elements/base classes for the purposes of
calculating their layout. This is also true for Obj-C types, but we
haven't been forcefully completing those.

The test-case that's being un-XFAILed in this patch demonstrates a case
where not completing the super-class forcefully causes a clang crash.

rdar://168440264
2026-01-20 18:26:23 +00:00

60 lines
1.3 KiB
Plaintext

# In this test we compile with -gmodules but delete the ModuleCache.
# When LLDB tries to find a definition for NSObject (the Foo's super-class)
# it will fail to do so. LLDB should handle this situation gracefully.
# A super-class definition is required when laying out Obj-C types.
#
# REQUIRES: system-darwin
#
# RUN: split-file %s %t
#
# RUN: %clang_host %t/main.m -c -g -gmodules -fmodules -fcxx-modules \
# RUN: -fmodule-map-file=%t/module.modulemap \
# RUN: -fmodules-cache-path=%t/ModuleCache -o %t/main.o
#
# RUN: %clang_host %t/module.m -c -g -gmodules -fmodules -fcxx-modules \
# RUN: -fmodule-map-file=%t/module.modulemap \
# RUN: -fmodules-cache-path=%t/ModuleCache -o %t/module.o
#
# RUN: %clang_host %t/*.o -framework Foundation -o %t.out
#
# RUN: rm -r %t/ModuleCache
#
# RUN: %lldb -x -o "settings set interpreter.stop-command-source-on-error false" \
# RUN: -s %t/commands.input %t.out -o exit 2>&1 | FileCheck %s
#--- main.m
@import foo;
int main() {
Foo *f = [Foo new];
__builtin_debugtrap();
}
#--- module.m
#import "module.h"
@implementation Foo
@end
#--- module.h
#import <Foundation/Foundation.h>
@interface Foo : NSObject
@end
#--- module.modulemap
module foo {
header "module.h"
export *
}
#--- commands.input
run
expression *f
# CHECK: (lldb) expression *f