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() { extern void mayThrow(); mayThrow(); 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 K { 61 virtual void func() { 62 } 63 }; 64 65 struct A { 66 int one; 67 static const int HdrSize = 52; 68 int two; 69 A() { 70 int x = 1; 71 } 72 }; 73 74 void f1() { 75 D x; 76 x.func(); 77 E y; 78 int i = F::i; 79 F::inner z; 80 K k; 81 k.func(); 82 } 83 84 int main(int argc, char **argv) { 85 B b; 86 G::inner c_i; 87 if (argc) { 88 A a; 89 } 90 return 0; 91 } 92 93 // RUN: %clang_cc1 -triple x86_64-unknown_unknown -emit-llvm -debug-info-kind=limited -fexceptions -std=c++98 %s -o - | FileCheck -check-prefix=CHECK98 -check-prefix=CHECK %s 94 // RUN: %clang_cc1 -triple i686-cygwin -emit-llvm -debug-info-kind=limited -fexceptions -std=c++98 %s -o - | FileCheck -check-prefix=CHECK98 -check-prefix=CHECK %s 95 // RUN: %clang_cc1 -triple armv7l-unknown-linux-gnueabihf -emit-llvm -debug-info-kind=limited -fexceptions -std=c++98 %s -o - | FileCheck -check-prefix=CHECK98 -check-prefix=CHECK %s 96 // RUN: %clang_cc1 -triple x86_64-unknown_unknown -emit-llvm -debug-info-kind=limited -fexceptions -std=c++11 %s -o - | FileCheck -check-prefix=CHECK11 -check-prefix=CHECK %s 97 // RUN: %clang_cc1 -triple i686-cygwin -emit-llvm -debug-info-kind=limited -fexceptions -std=c++11 %s -o - | FileCheck -check-prefix=CHECK11 -check-prefix=CHECK %s 98 // RUN: %clang_cc1 -triple armv7l-unknown-linux-gnueabihf -emit-llvm -debug-info-kind=limited -fexceptions -std=c++11 %s -o - | FileCheck -check-prefix=CHECK11 -check-prefix=CHECK %s 99 100 // CHECK98: invoke {{.+}} @_ZN1BD1Ev(%class.B* %b) 101 // CHECK98-NEXT: unwind label %{{.+}}, !dbg ![[EXCEPTLOC:.*]] 102 // CHECK11: call {{.+}} @_ZN1BD1Ev(%class.B* %b){{.*}}, !dbg ![[EXCEPTLOC:.*]] 103 104 // CHECK: store i32 0, i32* %{{.+}}, !dbg ![[RETLOC:.*]] 105 106 // CHECK: [[F:![0-9]*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "F" 107 // CHECK-SAME: DIFlagFwdDecl 108 // CHECK-NOT: identifier: 109 // CHECK-SAME: ){{$}} 110 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "I" 111 // CHECK-NOT: DIFlagFwdDecl 112 // CHECK-SAME: ){{$}} 113 114 // CHECK: ![[INT:[0-9]+]] = !DIBasicType(name: "int" 115 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo" 116 // CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "bar" 117 // CHECK: !DICompositeType(tag: DW_TAG_union_type, name: "baz" 118 // CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "B" 119 // CHECK-NOT: DIFlagFwdDecl 120 // CHECK-SAME: ){{$}} 121 // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "_vptr$B", 122 // CHECK-SAME: DIFlagArtificial 123 124 // CHECK: [[C:![0-9]*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "C", 125 // CHECK-NOT: DIFlagFwdDecl 126 // CHECK-SAME: elements: [[C_MEM:![0-9]*]] 127 // CHECK-SAME: vtableHolder: [[C]] 128 // CHECK-NOT: identifier: 129 // CHECK-SAME: ){{$}} 130 // CHECK: [[C_MEM]] = !{[[C_VPTR:![0-9]*]], [[C_S:![0-9]*]], [[C_DTOR:![0-9]*]]} 131 // CHECK: [[C_VPTR]] = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$C" 132 // CHECK-SAME: DIFlagArtificial 133 // CHECK: [[C_S]] = !DIDerivedType(tag: DW_TAG_member, name: "s" 134 // CHECK-SAME: baseType: ![[INT]] 135 // CHECK-SAME: DIFlagStaticMember 136 // CHECK: [[C_DTOR]] = !DISubprogram(name: "~C" 137 138 // CHECK: [[D:![0-9]+]] = !DICompositeType(tag: DW_TAG_structure_type, name: "D" 139 // CHECK-SAME: size: 140 // CHECK-SAME: DIFlagFwdDecl 141 // CHECK-NOT: identifier: 142 // CHECK-SAME: ){{$}} 143 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "E" 144 // CHECK-SAME: DIFlagFwdDecl 145 // CHECK-NOT: identifier: 146 // CHECK-SAME: ){{$}} 147 148 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "K" 149 // CHECK-SAME: identifier: "_ZTS1K" 150 // CHECK-SAME: ){{$}} 151 152 // CHECK: !DISubprogram(name: "func",{{.*}} scope: [[D]] 153 // CHECK-SAME: DISPFlagDefinition 154 // CHECK-SAME: declaration: [[D_FUNC_DECL:![0-9]*]] 155 // CHECK: [[D_FUNC_DECL]] = !DISubprogram(name: "func",{{.*}} scope: [[D]] 156 157 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "inner",{{.*}} line: 50 158 // CHECK-NOT: DIFlagFwdDecl 159 // CHECK-SAME: elements: [[G_INNER_MEM:![0-9]*]] 160 // CHECK-SAME: identifier: "_ZTSN1G5innerE" 161 162 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "G" 163 // CHECK-SAME: DIFlagFwdDecl 164 // CHECK-NOT: identifier: 165 // CHECK-SAME: ){{$}} 166 // CHECK: [[G_INNER_MEM]] = !{[[G_INNER_I:![0-9]*]]} 167 // CHECK: [[G_INNER_I]] = !DIDerivedType(tag: DW_TAG_member, name: "j" 168 // CHECK-SAME: baseType: ![[INT]] 169 170 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "A" 171 // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "HdrSize" 172 // 173 // CHECK: ![[EXCEPTLOC]] = !DILocation(line: 91, 174 // CHECK: ![[RETLOC]] = !DILocation(line: 90, 175