debug-info-class.cpp revision 1fe3263a0df6ba164ea3922590a9e585e6737b82
1struct foo; 2void func(foo *f) { 3} 4class bar; 5void func(bar *f) { 6} 7union baz; 8void func(baz *f) { 9} 10 11class B { 12public: 13 virtual ~B(); 14}; 15 16B::~B() { 17} 18 19struct C { 20 static int s; 21 virtual ~C(); 22}; 23 24C::~C() { 25} 26 27struct D { 28 D(); 29 virtual ~D(); 30 void func() { 31 } 32}; 33 34struct E { 35 E(); 36 virtual ~E(); 37 virtual void func() { 38 } 39}; 40 41struct F { 42 struct inner { 43 }; 44 static const int i = 2; 45 virtual ~F(); 46}; 47 48struct G { 49 virtual void func(); 50 struct inner { 51 int j; 52 }; 53}; 54 55struct H {}; 56struct I : virtual H {}; 57struct J : I {}; 58J j; 59 60struct A { 61 int one; 62 static const int HdrSize = 52; 63 int two; 64 A() { 65 int x = 1; 66 } 67}; 68 69void f1() { 70 D x; 71 x.func(); 72 E y; 73 int i = F::i; 74 F::inner z; 75} 76 77int main(int argc, char **argv) { 78 B b; 79 G::inner c_i; 80 if (argc) { 81 A a; 82 } 83 return 0; 84} 85 86// RUN: %clang -target x86_64-unknown_unknown -emit-llvm -g -S %s -o - | FileCheck %s 87// RUN: %clang -target i686-cygwin -emit-llvm -g -S %s -o - | FileCheck %s 88// RUN: %clang -target armv7l-unknown-linux-gnueabihf -emit-llvm -g -S %s -o - | FileCheck %s 89 90// CHECK: invoke {{.+}} @_ZN1BD1Ev(%class.B* %b) 91// CHECK-NEXT: unwind label %{{.+}}, !dbg ![[EXCEPTLOC:.*]] 92// CHECK: store i32 0, i32* %{{.+}}, !dbg ![[RETLOC:.*]] 93// CHECK: DW_TAG_structure_type ] [foo] 94// CHECK: DW_TAG_class_type ] [bar] 95// CHECK: DW_TAG_union_type ] [baz] 96// CHECK: DW_TAG_class_type ] [B] {{.*}} [def] 97// CHECK: metadata !"_vptr$B", {{.*}}, i32 64, metadata !{{.*}}} ; [ DW_TAG_member ] 98 99// CHECK: [[C:![0-9]*]] = {{.*}} metadata [[C_MEM:![0-9]*]], i32 0, metadata !"_ZTS1C", null, metadata !"_ZTS1C"} ; [ DW_TAG_structure_type ] [C] {{.*}} [def] 100// CHECK: [[C_MEM]] = metadata !{metadata [[C_VPTR:![0-9]*]], metadata [[C_S:![0-9]*]], metadata [[C_DTOR:![0-9]*]]} 101// CHECK: [[C_VPTR]] = {{.*}} ; [ DW_TAG_member ] [_vptr$C] {{.*}} [artificial] 102// CHECK: [[C_S]] = {{.*}} ; [ DW_TAG_member ] [s] {{.*}} [static] [from int] 103// CHECK: [[C_DTOR]] = {{.*}} ; [ DW_TAG_subprogram ] {{.*}} [~C] 104 105// CHECK: metadata [[D_MEM:![0-9]*]], i32 0, null, null, metadata !"_ZTS1D"} ; [ DW_TAG_structure_type ] [D] {{.*}} [decl] 106// CHECK: [[D_MEM]] = metadata !{metadata [[D_FUNC:![0-9]*]]} 107// CHECK: [[D_FUNC]] = {{.*}} ; [ DW_TAG_subprogram ] {{.*}} [func] 108// CHECK: null, i32 0, null, null, metadata !"_ZTS1E"} ; [ DW_TAG_structure_type ] [E] {{.*}} [decl] 109// CHECK: [[F:![0-9]*]] = {{.*}} metadata [[F_MEM:![0-9]*]], i32 0, null, null, metadata !"_ZTS1F"} ; [ DW_TAG_structure_type ] [F] {{.*}} [decl] 110// CHECK: [[F_MEM]] = metadata !{metadata [[F_I:![0-9]*]]} 111// CHECK: [[F_I]] = {{.*}} ; [ DW_TAG_member ] [i] 112 113// CHECK: null, i32 0, null, null, metadata !"_ZTS1G"} ; [ DW_TAG_structure_type ] [G] {{.*}} [decl] 114// CHECK: metadata [[G_INNER_MEM:![0-9]*]], i32 0, null, null, metadata !"_ZTSN1G5innerE"} ; [ DW_TAG_structure_type ] [inner] [line 50, {{.*}} [def] 115// CHECK: [[G_INNER_MEM]] = metadata !{metadata [[G_INNER_I:![0-9]*]]} 116// CHECK: [[G_INNER_I]] = {{.*}} ; [ DW_TAG_member ] [j] {{.*}} [from int] 117 118// CHECK: ; [ DW_TAG_structure_type ] [A] 119// CHECK: HdrSize 120// CHECK: ; [ DW_TAG_structure_type ] [I] {{.*}} [def] 121 122// CHECK: [[F_I_DEF:![0-9]*]] = {{.*}}, metadata [[F_I]]} ; [ DW_TAG_variable ] [i] 123 124// CHECK: ![[EXCEPTLOC]] = metadata !{i32 84, 125// CHECK: ![[RETLOC]] = metadata !{i32 83, 126