debug-info-class.cpp revision db2c42ca845e15a4aa5486031bbfe2738ef58a86
10cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysingerstruct foo; 20cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysingervoid func(foo *f) { 30cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger} 40cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysingerclass bar; 50cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysingervoid func(bar *f) { 60cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger} 70cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysingerunion baz; 80cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysingervoid func(baz *f) { 90cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger} 100cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger 110cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysingerclass B { 120cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysingerpublic: 130cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger virtual ~B(); 140cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger}; 150cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger 160cbed357ab749fa0cf58e8d72230c2ed92334932Mike FrysingerB::~B() { 170cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger} 180cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger 190cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysingerstruct C { 200cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger static int s; 210cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger virtual ~C(); 220cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger}; 230cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger 240cbed357ab749fa0cf58e8d72230c2ed92334932Mike FrysingerC::~C() { 250cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger} 260cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger 270cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysingerstruct D { 280cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger D(); 29a0866bce3560aefe25a51bcdb659108172d5f926Dmitry V. Levin virtual ~D(); 30a0866bce3560aefe25a51bcdb659108172d5f926Dmitry V. Levin void func() { 31eddefd64c3ad70bd4dbec22838cdd45f87c14cffDmitry V. Levin } 320cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger}; 330cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger 340cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysingerstruct E { 350cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger E(); 360cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger virtual ~E(); 370cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger virtual void func() { 380cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger } 390cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger}; 400cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger 41a0866bce3560aefe25a51bcdb659108172d5f926Dmitry V. Levinstruct F { 42a0866bce3560aefe25a51bcdb659108172d5f926Dmitry V. Levin struct inner { 43a0866bce3560aefe25a51bcdb659108172d5f926Dmitry V. Levin }; 44a0866bce3560aefe25a51bcdb659108172d5f926Dmitry V. Levin static const int i = 2; 450ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin virtual ~F(); 46eddefd64c3ad70bd4dbec22838cdd45f87c14cffDmitry V. Levin}; 470ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin 480ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levinstruct G { 490ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin virtual void func(); 500ed617bd66624cec6138102545d73b2e2346f1f6Dmitry V. Levin struct inner { 510cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger int j; 520a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin }; 53d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes}; 540cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger 550a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levinstruct H {}; 560cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysingerstruct I : virtual H {}; 570a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levinstruct J : I {}; 580a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. LevinJ j; 590a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin 60eddefd64c3ad70bd4dbec22838cdd45f87c14cffDmitry V. Levinstruct A { 610a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin int one; 620a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin static const int HdrSize = 52; 630cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger int two; 640a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin A() { 65d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes int x = 1; 660a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin } 670a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin}; 680cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger 690a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levinvoid f1() { 700a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin D x; 710a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin x.func(); 720cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger E y; 730a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin int i = F::i; 740a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin F::inner z; 750a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin} 76eddefd64c3ad70bd4dbec22838cdd45f87c14cffDmitry V. Levin 770a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levinint main(int argc, char **argv) { 78d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes B b; 790a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin G::inner c_i; 80a0866bce3560aefe25a51bcdb659108172d5f926Dmitry V. Levin if (argc) { 810cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger A a; 820a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin } 830a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin return 0; 840a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin} 85eddefd64c3ad70bd4dbec22838cdd45f87c14cffDmitry V. Levin 86484326dbd8f8e02983e37498b4b5fa990d16b536Dmitry V. Levin// RUN: %clang -target x86_64-unknown_unknown -emit-llvm -g -S %s -o - | FileCheck %s 87d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes// RUN: %clang -target i686-cygwin -emit-llvm -g -S %s -o - | FileCheck %s 88484326dbd8f8e02983e37498b4b5fa990d16b536Dmitry V. Levin// RUN: %clang -target armv7l-unknown-linux-gnueabihf -emit-llvm -g -S %s -o - | FileCheck %s 890a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin 900cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger// CHECK: invoke {{.+}} @_ZN1BD1Ev(%class.B* %b) 910a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK-NEXT: unwind label %{{.+}}, !dbg ![[EXCEPTLOC:.*]] 92d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes// CHECK: store i32 0, i32* %{{.+}}, !dbg ![[RETLOC:.*]] 930a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: DW_TAG_structure_type ] [foo] 940a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: DW_TAG_class_type ] [bar] 950cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger// CHECK: DW_TAG_union_type ] [baz] 960a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: DW_TAG_class_type ] [B] {{.*}} [def] 970a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: metadata !"_vptr$B", {{.*}}, i32 64, metadata !{{.*}}} ; [ DW_TAG_member ] 980a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin 990cbed357ab749fa0cf58e8d72230c2ed92334932Mike Frysinger// CHECK: [[C:![0-9]*]] = {{.*}} metadata [[C_MEM:![0-9]*]], i32 0, metadata !"_ZTS1C", null, metadata !"_ZTS1C"} ; [ DW_TAG_structure_type ] [C] {{.*}} [def] 1000a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: [[C_MEM]] = metadata !{metadata [[C_VPTR:![0-9]*]], metadata [[C_S:![0-9]*]], metadata [[C_DTOR:![0-9]*]]} 1010a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: [[C_VPTR]] = {{.*}} ; [ DW_TAG_member ] [_vptr$C] {{.*}} [artificial] 1020a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: [[C_S]] = {{.*}} ; [ DW_TAG_member ] [s] {{.*}} [static] [from int] 1030a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: [[C_DTOR]] = {{.*}} ; [ DW_TAG_subprogram ] {{.*}} [~C] 104eddefd64c3ad70bd4dbec22838cdd45f87c14cffDmitry V. Levin 1050a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: ; [ DW_TAG_structure_type ] [I] {{.*}} [def] 106d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes// CHECK: metadata [[D_MEM:![0-9]*]], i32 0, null, null, metadata !"_ZTS1D"} ; [ DW_TAG_structure_type ] [D] {{.*}} [decl] 1070a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: [[D_MEM]] = metadata !{metadata [[D_FUNC:![0-9]*]]} 1080a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: [[D_FUNC]] = {{.*}} ; [ DW_TAG_subprogram ] {{.*}} [func] 1090a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: null, i32 0, null, null, metadata !"_ZTS1E"} ; [ DW_TAG_structure_type ] [E] {{.*}} [decl] 1100a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: [[F:![0-9]*]] = {{.*}} metadata [[F_MEM:![0-9]*]], i32 0, null, null, metadata !"_ZTS1F"} ; [ DW_TAG_structure_type ] [F] {{.*}} [decl] 1110a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: [[F_MEM]] = metadata !{metadata [[F_I:![0-9]*]]} 1120a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: [[F_I]] = {{.*}} ; [ DW_TAG_member ] [i] 1130a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin 1140a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: null, i32 0, null, null, metadata !"_ZTS1G"} ; [ DW_TAG_structure_type ] [G] {{.*}} [decl] 1150a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: metadata [[G_INNER_MEM:![0-9]*]], i32 0, null, null, metadata !"_ZTSN1G5innerE"} ; [ DW_TAG_structure_type ] [inner] [line 50, {{.*}} [def] 1160a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: [[G_INNER_MEM]] = metadata !{metadata [[G_INNER_I:![0-9]*]]} 1170a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: [[G_INNER_I]] = {{.*}} ; [ DW_TAG_member ] [j] {{.*}} [from int] 1180a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin 119d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes// CHECK: ; [ DW_TAG_structure_type ] [A] 1200a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: HdrSize 1210a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin 1220a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: [[F_I_DEF:![0-9]*]] = {{.*}}, metadata [[F_I]]} ; [ DW_TAG_variable ] [i] 1230a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin 1240a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: ![[EXCEPTLOC]] = metadata !{i32 84, 1250a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin// CHECK: ![[RETLOC]] = metadata !{i32 83, 1260a27c814b2d62cc8319bff729f8ae18cdaed9bb4Dmitry V. Levin