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
60 lines
1.3 KiB
Plaintext
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
|