brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 6e97154 Raw
130 lines · plain
1# REQUIRES: target-windows2 3# Test UDT layout reconstruction4# RUN: split-file %s %t5# RUN: %build --compiler=clang-cl -o %t.exe -- %t/main.cpp6# RUN: %lldb -f %t.exe -s %t/commands.input 2>&1 | FileCheck %s7 8#--- main.cpp9 10// this is from the DIA plugin (UdtLayoutTest.cpp)11struct A {12  explicit A(int u) { _u._u3 = u; }13  A(const A &) = default;14  virtual ~A() = default;15 16private:17  union U {18    char _u1;19    short _u2;20    int _u3;21  };22 23  A::U _u;24};25 26#pragma pack(push, 1)27template <int I> struct B : public virtual A {28  B(char a, unsigned short b, int c) : A(a + b + c), _a(a), _b(b), _c(c) {}29 30private:31  char _a;32  unsigned short : 3;33  unsigned short _b : 6;34  unsigned short : 4;35  int _c;36};37#pragma pack(pop)38 39#pragma pack(push, 16)40class C : private virtual B<0>, public virtual B<1>, private B<2>, public B<3> {41public:42  C(char x, char y, char z)43      : A(x - y + z), B<0>(x, y, z), B<1>(x * 2, y * 2, z * 2),44        B<2>(x * 3, y * 3, z * 3), B<3>(x * 4, y * 4, z * 4), _x(x * 5),45        _y(y * 5), _z(z * 5) {}46 47  static int abc;48 49private:50  int _x;51  short _y;52  char _z;53};54int C::abc = 123;55#pragma pack(pop)56 57class List {58public:59  List() = default;60  List(List *p, List *n, C v) : Prev(p), Next(n), Value(v) {}61 62private:63  List *Prev = nullptr;64  List *Next = nullptr;65  C Value{1, 2, 3};66};67 68int main() {69  List ls[16];70  return 0; // break here71}72 73#--- commands.input74 75settings set target.max-children-depth 1076br set -p "break here"77run78target variable79frame variable80quit81 82# CHECK: (int) ::C::abc = 12383 84# CHECK:      (List[16]) ls = {85# CHECK:        [15] = {86# CHECK-NEXT:     Prev = nullptr87# CHECK-NEXT:     Next = nullptr88# CHECK-NEXT:     Value = {89# CHECK-NEXT:       B<2> = {90# CHECK-NEXT:         A = {91# CHECK-NEXT:           _u = (_u1 = '\x02', _u2 = 2, _u3 = 2)92# CHECK-NEXT:         }93# CHECK-NEXT:         _a = '\x03'94# CHECK-NEXT:         _b = 695# CHECK-NEXT:         _c = 996# CHECK-NEXT:       }97# CHECK-NEXT:       B<3> = {98# CHECK-NEXT:         A = {99# CHECK-NEXT:           _u = (_u1 = '\x02', _u2 = 2, _u3 = 2)100# CHECK-NEXT:         }101# CHECK-NEXT:         _a = '\x04'102# CHECK-NEXT:         _b = 8103# CHECK-NEXT:         _c = 12104# CHECK-NEXT:       }105# CHECK-NEXT:       A = {106# CHECK-NEXT:         _u = (_u1 = '\x02', _u2 = 2, _u3 = 2)107# CHECK-NEXT:       }108# CHECK-NEXT:       B<0> = {109# CHECK-NEXT:         A = {110# CHECK-NEXT:           _u = (_u1 = '\x02', _u2 = 2, _u3 = 2)111# CHECK-NEXT:         }112# CHECK-NEXT:         _a = '\x01'113# CHECK-NEXT:         _b = 2114# CHECK-NEXT:         _c = 3115# CHECK-NEXT:       }116# CHECK-NEXT:       B<1> = {117# CHECK-NEXT:         A = {118# CHECK-NEXT:           _u = (_u1 = '\x02', _u2 = 2, _u3 = 2)119# CHECK-NEXT:         }120# CHECK-NEXT:         _a = '\x02'121# CHECK-NEXT:         _b = 4122# CHECK-NEXT:         _c = 6123# CHECK-NEXT:       }124# CHECK-NEXT:       _x = 5125# CHECK-NEXT:       _y = 10126# CHECK-NEXT:       _z = '\x0f'127# CHECK-NEXT:     }128# CHECK-NEXT:   }129# CHECK-NEXT: }130