1*67e74705SXin Li struct foo;
func(foo * f)2*67e74705SXin Li void func(foo *f) {
3*67e74705SXin Li }
4*67e74705SXin Li class bar;
func(bar * f)5*67e74705SXin Li void func(bar *f) {
6*67e74705SXin Li }
7*67e74705SXin Li union baz;
func(baz * f)8*67e74705SXin Li void func(baz *f) {
9*67e74705SXin Li }
10*67e74705SXin Li
11*67e74705SXin Li class B {
12*67e74705SXin Li public:
13*67e74705SXin Li virtual ~B();
14*67e74705SXin Li };
15*67e74705SXin Li
~B()16*67e74705SXin Li B::~B() {
17*67e74705SXin Li }
18*67e74705SXin Li
19*67e74705SXin Li struct C {
20*67e74705SXin Li static int s;
21*67e74705SXin Li virtual ~C();
22*67e74705SXin Li };
23*67e74705SXin Li
~C()24*67e74705SXin Li C::~C() {
25*67e74705SXin Li }
26*67e74705SXin Li
27*67e74705SXin Li struct D {
28*67e74705SXin Li D();
29*67e74705SXin Li virtual ~D();
funcD30*67e74705SXin Li void func() {
31*67e74705SXin Li }
32*67e74705SXin Li };
33*67e74705SXin Li
34*67e74705SXin Li struct E {
35*67e74705SXin Li E();
36*67e74705SXin Li virtual ~E();
funcE37*67e74705SXin Li virtual void func() {
38*67e74705SXin Li }
39*67e74705SXin Li };
40*67e74705SXin Li
41*67e74705SXin Li struct F {
42*67e74705SXin Li struct inner {
43*67e74705SXin Li };
44*67e74705SXin Li static const int i = 2;
45*67e74705SXin Li virtual ~F();
46*67e74705SXin Li };
47*67e74705SXin Li
48*67e74705SXin Li struct G {
49*67e74705SXin Li virtual void func();
50*67e74705SXin Li struct inner {
51*67e74705SXin Li int j;
52*67e74705SXin Li };
53*67e74705SXin Li };
54*67e74705SXin Li
55*67e74705SXin Li struct H {};
56*67e74705SXin Li struct I : virtual H {};
57*67e74705SXin Li struct J : I {};
58*67e74705SXin Li J j;
59*67e74705SXin Li
60*67e74705SXin Li struct A {
61*67e74705SXin Li int one;
62*67e74705SXin Li static const int HdrSize = 52;
63*67e74705SXin Li int two;
AA64*67e74705SXin Li A() {
65*67e74705SXin Li int x = 1;
66*67e74705SXin Li }
67*67e74705SXin Li };
68*67e74705SXin Li
f1()69*67e74705SXin Li void f1() {
70*67e74705SXin Li D x;
71*67e74705SXin Li x.func();
72*67e74705SXin Li E y;
73*67e74705SXin Li int i = F::i;
74*67e74705SXin Li F::inner z;
75*67e74705SXin Li }
76*67e74705SXin Li
main(int argc,char ** argv)77*67e74705SXin Li int main(int argc, char **argv) {
78*67e74705SXin Li B b;
79*67e74705SXin Li G::inner c_i;
80*67e74705SXin Li if (argc) {
81*67e74705SXin Li A a;
82*67e74705SXin Li }
83*67e74705SXin Li return 0;
84*67e74705SXin Li }
85*67e74705SXin Li
86*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-unknown_unknown -emit-llvm -debug-info-kind=limited -fexceptions %s -o - | FileCheck %s
87*67e74705SXin Li // RUN: %clang_cc1 -triple i686-cygwin -emit-llvm -debug-info-kind=limited -fexceptions %s -o - | FileCheck %s
88*67e74705SXin Li // RUN: %clang_cc1 -triple armv7l-unknown-linux-gnueabihf -emit-llvm -debug-info-kind=limited -fexceptions %s -o - | FileCheck %s
89*67e74705SXin Li
90*67e74705SXin Li // CHECK: invoke {{.+}} @_ZN1BD1Ev(%class.B* %b)
91*67e74705SXin Li // CHECK-NEXT: unwind label %{{.+}}, !dbg ![[EXCEPTLOC:.*]]
92*67e74705SXin Li // CHECK: store i32 0, i32* %{{.+}}, !dbg ![[RETLOC:.*]]
93*67e74705SXin Li
94*67e74705SXin Li // CHECK: [[F:![0-9]*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "F"
95*67e74705SXin Li // CHECK-SAME: DIFlagFwdDecl
96*67e74705SXin Li // CHECK-SAME: identifier: "_ZTS1F"
97*67e74705SXin Li // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "I"
98*67e74705SXin Li // CHECK-NOT: DIFlagFwdDecl
99*67e74705SXin Li // CHECK-SAME: ){{$}}
100*67e74705SXin Li
101*67e74705SXin Li // CHECK: ![[INT:[0-9]+]] = !DIBasicType(name: "int"
102*67e74705SXin Li // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo"
103*67e74705SXin Li // CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "bar"
104*67e74705SXin Li // CHECK: !DICompositeType(tag: DW_TAG_union_type, name: "baz"
105*67e74705SXin Li // CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "B"
106*67e74705SXin Li // CHECK-NOT: DIFlagFwdDecl
107*67e74705SXin Li // CHECK-SAME: ){{$}}
108*67e74705SXin Li // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "_vptr$B",
109*67e74705SXin Li // CHECK-SAME: DIFlagArtificial
110*67e74705SXin Li
111*67e74705SXin Li // CHECK: [[C:![0-9]*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "C",
112*67e74705SXin Li // CHECK-NOT: DIFlagFwdDecl
113*67e74705SXin Li // CHECK-SAME: elements: [[C_MEM:![0-9]*]]
114*67e74705SXin Li // CHECK-SAME: vtableHolder: [[C]]
115*67e74705SXin Li // CHECK-SAME: identifier: "_ZTS1C"
116*67e74705SXin Li // CHECK: [[C_MEM]] = !{[[C_VPTR:![0-9]*]], [[C_S:![0-9]*]], [[C_DTOR:![0-9]*]]}
117*67e74705SXin Li // CHECK: [[C_VPTR]] = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$C"
118*67e74705SXin Li // CHECK-SAME: DIFlagArtificial
119*67e74705SXin Li // CHECK: [[C_S]] = !DIDerivedType(tag: DW_TAG_member, name: "s"
120*67e74705SXin Li // CHECK-SAME: baseType: ![[INT]]
121*67e74705SXin Li // CHECK-SAME: DIFlagStaticMember
122*67e74705SXin Li // CHECK: [[C_DTOR]] = !DISubprogram(name: "~C"
123*67e74705SXin Li
124*67e74705SXin Li // CHECK: [[D:![0-9]+]] = !DICompositeType(tag: DW_TAG_structure_type, name: "D"
125*67e74705SXin Li // CHECK-SAME: DIFlagFwdDecl
126*67e74705SXin Li // CHECK-SAME: identifier: "_ZTS1D"
127*67e74705SXin Li // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "E"
128*67e74705SXin Li // CHECK-SAME: DIFlagFwdDecl
129*67e74705SXin Li // CHECK-SAME: identifier: "_ZTS1E"
130*67e74705SXin Li
131*67e74705SXin Li // CHECK: !DISubprogram(name: "func",{{.*}} scope: [[D]]
132*67e74705SXin Li // CHECK-SAME: isDefinition: true
133*67e74705SXin Li // CHECK-SAME: declaration: [[D_FUNC_DECL:![0-9]*]]
134*67e74705SXin Li // CHECK: [[D_FUNC_DECL]] = !DISubprogram(name: "func",{{.*}} scope: [[D]]
135*67e74705SXin Li // CHECK-SAME: isDefinition: false
136*67e74705SXin Li
137*67e74705SXin Li // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "inner",{{.*}} line: 50
138*67e74705SXin Li // CHECK-NOT: DIFlagFwdDecl
139*67e74705SXin Li // CHECK-SAME: elements: [[G_INNER_MEM:![0-9]*]]
140*67e74705SXin Li // CHECK-SAME: identifier: "_ZTSN1G5innerE"
141*67e74705SXin Li
142*67e74705SXin Li // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "G"
143*67e74705SXin Li // CHECK-SAME: DIFlagFwdDecl
144*67e74705SXin Li // CHECK-SAME: identifier: "_ZTS1G"
145*67e74705SXin Li // CHECK: [[G_INNER_MEM]] = !{[[G_INNER_I:![0-9]*]]}
146*67e74705SXin Li // CHECK: [[G_INNER_I]] = !DIDerivedType(tag: DW_TAG_member, name: "j"
147*67e74705SXin Li // CHECK-SAME: baseType: ![[INT]]
148*67e74705SXin Li
149*67e74705SXin Li // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "A"
150*67e74705SXin Li // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "HdrSize"
151*67e74705SXin Li //
152*67e74705SXin Li // CHECK: ![[EXCEPTLOC]] = !DILocation(line: 84,
153*67e74705SXin Li // CHECK: ![[RETLOC]] = !DILocation(line: 83,
154