1 struct foo; 2 void func(foo *f) { 3 } 4 class bar; 5 void func(bar *f) { 6 } 7 union baz; 8 void func(baz *f) { 9 } 10 11 class B { 12 public: 13 virtual ~B(); 14 }; 15 16 B::~B() { 17 } 18 19 struct C { 20 static int s; 21 virtual ~C(); 22 }; 23 24 C::~C() { 25 } 26 27 struct D { 28 D(); 29 virtual ~D(); 30 void func() { 31 } 32 }; 33 34 struct E { 35 E(); 36 virtual ~E(); 37 virtual void func() { 38 } 39 }; 40 41 struct F { 42 struct inner { 43 }; 44 static const int i = 2; 45 virtual ~F(); 46 }; 47 48 struct G { 49 virtual void func(); 50 struct inner { 51 int j; 52 }; 53 }; 54 55 struct H {}; 56 struct I : virtual H {}; 57 struct J : I {}; 58 J j; 59 60 struct A { 61 int one; 62 static const int HdrSize = 52; 63 int two; 64 A() { 65 int x = 1; 66 } 67 }; 68 69 void f1() { 70 D x; 71 x.func(); 72 E y; 73 int i = F::i; 74 F::inner z; 75 } 76 77 int 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: !"0xd\00_vptr$B\00{{.*}}\0064", {{.*}} ; [ DW_TAG_member ] 98 99 // CHECK: [[C:![0-9]*]] = {{.*}} [[C_MEM:![0-9]*]], !"_ZTS1C", null, !"_ZTS1C"} ; [ DW_TAG_structure_type ] [C] {{.*}} [def] 100 // CHECK: [[C_MEM]] = !{[[C_VPTR:![0-9]*]], [[C_S:![0-9]*]], [[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: null, null, null, !"_ZTS1D"} ; [ DW_TAG_structure_type ] [D] {{.*}} [decl] 106 // CHECK: null, null, null, !"_ZTS1E"} ; [ DW_TAG_structure_type ] [E] {{.*}} [decl] 107 // CHECK: [[F:![0-9]*]] = {{.*}} null, null, null, !"_ZTS1F"} ; [ DW_TAG_structure_type ] [F] {{.*}} [decl] 108 109 // CHECK: null, null, null, !"_ZTS1G"} ; [ DW_TAG_structure_type ] [G] {{.*}} [decl] 110 // CHECK: [[G_INNER_MEM:![0-9]*]], null, null, !"_ZTSN1G5innerE"} ; [ DW_TAG_structure_type ] [inner] [line 50, {{.*}} [def] 111 // CHECK: [[G_INNER_MEM]] = !{[[G_INNER_I:![0-9]*]]} 112 // CHECK: [[G_INNER_I]] = {{.*}} ; [ DW_TAG_member ] [j] {{.*}} [from int] 113 114 // CHECK: ; [ DW_TAG_structure_type ] [A] 115 // CHECK: HdrSize 116 // CHECK: ; [ DW_TAG_structure_type ] [I] {{.*}} [def] 117 // 118 // CHECK: !"_ZTS1D", {{.*}}, [[D_FUNC_DECL:![0-9]*]], {{![0-9]*}}} ; [ DW_TAG_subprogram ] {{.*}} [def] [func] 119 // CHECK: [[D_FUNC_DECL]] = !{!"0x2e\00func\00{{.*}}\000\00{{[0-9]+}}"{{.*}}, !"_ZTS1D", {{.*}}, null} ; [ DW_TAG_subprogram ] {{.*}} [func] 120 121 // CHECK: ![[EXCEPTLOC]] = !MDLocation(line: 84, 122 // CHECK: ![[RETLOC]] = !MDLocation(line: 83, 123