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