aboutsummaryrefslogtreecommitdiff
path: root/lldb/test/Shell/SymbolFile/DWARF/objcxx-forward-decls.test
blob: 30109c2943c9b3d602fefe9706f79a920f8ad75e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 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 <Foundation/Foundation.h>

#include "lib.h"

void process(Request * r) {
  r->m_request = @"Hello, World!";
}