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