# REQUIRES: system-darwin # In this test we have two CUs with conflicting forward declaration # depending on the CU language (one is C++ and the other is Objective-C++). # We are then stopped in the C++ CU and try to print the type, at which # point LLDB will try to make it into an Clang AST node. If LLDB were to # interpret the type as C++ instead of Objective-C, we'd violate Clang # invariants and crash. # # RUN: split-file %s %t # RUN: %clangxx_host -c -g -x objective-c++ %t/request.m -o %t/request_objc.o # RUN: %clangxx_host -c -g %t/main.cpp -o %t/main.o # RUN: %clangxx_host %t/main.o %t/request_objc.o -framework Foundation -o %t/a.out # # RUN: %lldb %t/a.out \ # RUN: -o "breakpoint set -p return -X main" \ # RUN: -o run \ # RUN: -o "frame variable r" \ # RUN: -o exit | FileCheck %s # # RUN: dsymutil %t/a.out # # RUN: %lldb %t/a.out \ # RUN: -o "breakpoint set -p return -X main" \ # RUN: -o run \ # RUN: -o "frame variable r" \ # RUN: -o exit | FileCheck %s --check-prefix=CHECK-DSYM # CHECK: (lldb) frame variable r # CHECK-NEXT: (Request) ::r = (m_request = "Hello, World!") # CHECK-DSYM: (lldb) frame variable r # CHECK-DSYM-NEXT: (Request) ::r = (m_request = "Hello, World!") #--- lib.h #ifndef LIB_H_IN #define LIB_H_IN #ifdef __OBJC__ @class NSString; #else class NSString; #endif struct Request { NSString * m_request = nullptr; }; #endif // _H_IN #--- main.cpp #include "lib.h" void process(Request *); Request r; int main() { process(&r); return 0; } #--- request.m #import #include "lib.h" void process(Request * r) { r->m_request = @"Hello, World!"; }