197 lines · cpp
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() { extern void mayThrow(); mayThrow();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 K {61 virtual void func() {62 }63};64 65struct A {66 int one;67 static const int HdrSize = 52;68 int two;69 A() {70 int x = 1;71 }72};73 74namespace {75struct L {76 void func() {77 }78};79}80 81void f1() {82 D x;83 x.func();84 E y;85 int i = F::i;86 F::inner z;87 K k;88 k.func();89 L l;90 l.func();91}92 93int main(int argc, char **argv) {94 B b;95 G::inner c_i;96 if (argc) {97 A a;98 }99 return 0;100}101 102// 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 %s103// 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 %s104// 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 %s105// 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 %s106// 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 %s107// 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 %s108 109// CHECK98: invoke {{.+}} @_ZN1BD1Ev(ptr {{[^,]*}} %b)110// CHECK98-NEXT: unwind label %{{.+}}, !dbg ![[EXCEPTLOC:.*]]111// CHECK11: call {{.+}} @_ZN1BD1Ev(ptr {{[^,]*}} %b){{.*}}, !dbg ![[EXCEPTLOC:.*]]112 113// CHECK: store i32 0, ptr %{{.+}}, !dbg ![[RETLOC:.*]]114 115// CHECK: [[F:![0-9]*]] = !DICompositeType(tag: DW_TAG_structure_type, name: "F"116// CHECK-SAME: DIFlagFwdDecl117// CHECK-NOT: identifier:118// CHECK-SAME: ){{$}}119 120// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "I"121// CHECK-NOT: DIFlagFwdDecl122// CHECK-SAME: ){{$}}123 124// CHECK: ![[INT:[0-9]+]] = !DIBasicType(name: "int"125 126// CHECK: [[C:![0-9]*]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "C",127// CHECK-NOT: DIFlagFwdDecl128// 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: DIFlagArtificial135// CHECK: [[C_S]] = !DIDerivedType(tag: DW_TAG_member, name: "s"136// CHECK-SAME: baseType: ![[INT]]137// CHECK-SAME: DIFlagStaticMember138// CHECK: [[C_DTOR]] = !DISubprogram(name: "~C"139 140// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "K"141// CHECK-SAME: identifier: "_ZTS1K"142// CHECK-SAME: ){{$}}143 144// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "B"145// CHECK-NOT: DIFlagFwdDecl146// CHECK-SAME: ){{$}}147// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "_vptr$B",148// CHECK-SAME: DIFlagArtificial149 150// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "foo"151// CHECK: !DICompositeType(tag: DW_TAG_class_type, name: "bar"152// CHECK: !DICompositeType(tag: DW_TAG_union_type, name: "baz"153 154// CHECK: [[D:![0-9]+]] = !DICompositeType(tag: DW_TAG_structure_type, name: "D"155// CHECK-SAME: size:156// CHECK-SAME: DIFlagFwdDecl157// CHECK-NOT: identifier:158// CHECK-SAME: ){{$}}159 160// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "E"161// CHECK-SAME: DIFlagFwdDecl162// CHECK-NOT: identifier:163// CHECK-SAME: ){{$}}164 165// CHECK: [[L:![0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "L"166// CHECK-SAME: ){{$}}167// CHECK: [[L_FUNC_DECL:![0-9]*]] = !DISubprogram(name: "func",{{.*}} scope: [[L]]168// CHECK-SAME: DISPFlagLocalToUnit169 170// CHECK: !DISubprogram(name: "func",{{.*}} scope: [[D]]171// CHECK-SAME: DISPFlagDefinition172// CHECK-SAME: declaration: [[D_FUNC_DECL:![0-9]*]]173// CHECK: [[D_FUNC_DECL]] = !DISubprogram(name: "func",{{.*}} scope: [[D]]174 175// CHECK: !DISubprogram(name: "func",{{.*}} scope: [[L]]176// CHECK-SAME: DISPFlagLocalToUnit | DISPFlagDefinition177// CHECK-SAME: declaration: [[L_FUNC_DECL]]178 179// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "inner",{{.*}} line: 50180// CHECK-NOT: DIFlagFwdDecl181// CHECK-SAME: elements: [[G_INNER_MEM:![0-9]*]]182// CHECK-SAME: identifier: "_ZTSN1G5innerE"183 184// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "G"185// CHECK-SAME: DIFlagFwdDecl186// CHECK-NOT: identifier:187// CHECK-SAME: ){{$}}188// CHECK: [[G_INNER_MEM]] = !{[[G_INNER_I:![0-9]*]]}189// CHECK: [[G_INNER_I]] = !DIDerivedType(tag: DW_TAG_member, name: "j"190// CHECK-SAME: baseType: ![[INT]]191 192// CHECK: !DICompositeType(tag: DW_TAG_structure_type, name: "A"193// CHECK: !DIDerivedType(tag: DW_TAG_member, name: "HdrSize"194 195// CHECK: ![[EXCEPTLOC]] = !DILocation(line: 100,196// CHECK: ![[RETLOC]] = !DILocation(line: 99,197