xref: /aosp_15_r20/external/clang/test/CodeGenCXX/debug-info-class.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
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