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 namespace { 28 struct D { 29 D() {} 30 virtual ~D() {} 31 void func() { 32 } 33 }; 34 } // namespace 35 36 struct E { 37 E(); 38 virtual ~E(); 39 virtual void func() { 40 } 41 }; 42 43 struct F { 44 struct inner { 45 }; 46 static const int i = 2; 47 virtual ~F(); 48 }; 49 50 struct G { 51 virtual void func(); 52 struct inner { 53 int j; 54 }; 55 }; 56 57 struct H {}; 58 struct I : virtual H {}; 59 struct J : I {}; 60 J j; 61 62 struct K { 63 virtual void func() { 64 } 65 }; 66 67 struct A { 68 int one; 69 static const int HdrSize = 52; 70 int two; 71 A() { 72 int x = 1; 73 } 74 }; 75 76 void f1() { 77 D x; 78 x.func(); 79 E y; 80 int i = F::i; 81 F::inner z; 82 K k; 83 k.func(); 84 } 85 86 int main(int argc, char **argv) { 87 B b; 88 G::inner c_i; 89 if (argc) { 90 A a; 91 } 92 return 0; 93 } 94 95 // 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 96 // 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 97 // 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 98 // 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 99 // 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 100 // 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 101 102 // CHECK98: invoke {{.+}} @_ZN1BD1Ev(%class.B* {{[^,]*}} %b) 103 // CHECK98-NEXT: unwind label %{{.+}}, !dbg ![[EXCEPTLOC:.*]] 104 // CHECK11: call {{.+}} @_ZN1BD1Ev(%class.B* {{[^,]*}} %b){{.*}}, !dbg ![[EXCEPTLOC:.*]] 105 106 // CHECK: store i32 0, i32* %{{.+}}, !dbg ![[RETLOC:.*]] 107 108 // CHECK: [[F:![0-9]*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "F" 109 // CHECK-SAME: DIFlagFwdDecl 110 // CHECK-NOT: identifier: 111 // CHECK-SAME: ){{$}} 112 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "I" 113 // CHECK-NOT: DIFlagFwdDecl 114 // CHECK-SAME: ){{$}} 115 116 // CHECK: ![[INT:[0-9]+]] = !DIBasicType(name: "int" 117 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo" 118 // CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "bar" 119 // CHECK: !DICompositeType(tag: DW_TAG_union_type, name: "baz" 120 // CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "B" 121 // CHECK-NOT: DIFlagFwdDecl 122 // CHECK-SAME: ){{$}} 123 // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "_vptr$B", 124 // CHECK-SAME: DIFlagArtificial 125 126 // CHECK: [[C:![0-9]*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "C", 127 // CHECK-NOT: DIFlagFwdDecl 128 // CHECK-SAME: elements: [[C_MEM:![0-9]*]] 129 // CHECK-SAME: vtableHolder: [[C]] 130 // CHECK-NOT: identifier: 131 // CHECK-SAME: ){{$}} 132 // CHECK: [[C_MEM]] = !{[[C_VPTR:![0-9]*]], [[C_S:![0-9]*]], [[C_DTOR:![0-9]*]]} 133 // CHECK: [[C_VPTR]] = !DIDerivedType(tag: DW_TAG_member, name: "_vptr$C" 134 // CHECK-SAME: DIFlagArtificial 135 // CHECK: [[C_S]] = !DIDerivedType(tag: DW_TAG_member, name: "s" 136 // CHECK-SAME: baseType: ![[INT]] 137 // CHECK-SAME: DIFlagStaticMember 138 // CHECK: [[C_DTOR]] = !DISubprogram(name: "~C" 139 140 // CHECK: [[D:![0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "D" 141 // CHECK-SAME: size: 142 // CHECK-NOT: identifier: 143 // CHECK-SAME: ){{$}} 144 // CHECK: [[D_FUNC_DECL:![0-9]*]] = !DISubprogram(name: "func",{{.*}} scope: [[D]] 145 // CHECK-SAME: DISPFlagLocalToUnit 146 147 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "E" 148 // CHECK-SAME: DIFlagFwdDecl 149 // CHECK-NOT: identifier: 150 // CHECK-SAME: ){{$}} 151 152 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "K" 153 // CHECK-SAME: identifier: "_ZTS1K" 154 // CHECK-SAME: ){{$}} 155 156 // CHECK: !DISubprogram(name: "func",{{.*}} scope: [[D]] 157 // CHECK-SAME: DISPFlagLocalToUnit | DISPFlagDefinition 158 // CHECK-SAME: declaration: [[D_FUNC_DECL]] 159 160 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "inner",{{.*}} line: 52 161 // CHECK-NOT: DIFlagFwdDecl 162 // CHECK-SAME: elements: [[G_INNER_MEM:![0-9]*]] 163 // CHECK-SAME: identifier: "_ZTSN1G5innerE" 164 165 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "G" 166 // CHECK-SAME: DIFlagFwdDecl 167 // CHECK-NOT: identifier: 168 // CHECK-SAME: ){{$}} 169 // CHECK: [[G_INNER_MEM]] = !{[[G_INNER_I:![0-9]*]]} 170 // CHECK: [[G_INNER_I]] = !DIDerivedType(tag: DW_TAG_member, name: "j" 171 // CHECK-SAME: baseType: ![[INT]] 172 173 // CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "A" 174 // CHECK: !DIDerivedType(tag: DW_TAG_member, name: "HdrSize" 175 // 176 // CHECK: ![[EXCEPTLOC]] = !DILocation(line: 93, 177 // CHECK: ![[RETLOC]] = !DILocation(line: 92, 178