brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 83ed533 Raw
132 lines · cpp
1// clang-format off2// REQUIRES: lld, x863 4// Make sure class layout is correct.5// RUN: %clang_cl --target=x86_64-windows-msvc -Od -Z7 -c /Fo%t.obj -- %s6// RUN: lld-link -debug:full -nodefaultlib -entry:main %t.obj -out:%t.exe -pdb:%t.pdb7// RUN: %lldb -f %t.exe -s \8// RUN:     %p/Inputs/class_layout.lldbinit 2>&1 | FileCheck %s9 10// CHECK:      (lldb) expr a11// CHECK-NEXT: (A) $0 = (d1 = 'a', d2 = 1, d3 = 2, d4 = 'b')12// CHECK-NEXT: (lldb) expr b.c13// CHECK-NEXT: (char) $1 = 'a'14// CHECK-NEXT: (lldb) expr b.u.c15// CHECK-NEXT: (char[2]) $2 = "b"16// CHECK-NEXT: (lldb) expr b.u.i17// CHECK-NEXT: (int) $3 = 9818// CHECK-NEXT: (lldb) expr c19// CHECK-NEXT: (C) $4 = {20// CHECK-NEXT:   c = 'a'21// CHECK-NEXT:   x = 6522// CHECK-NEXT:    = {23// CHECK-NEXT:      = {24// CHECK-NEXT:       c1 = 'b'25// CHECK-NEXT:        = {26// CHECK-NEXT:          = {27// CHECK-NEXT:           s3 = {28// CHECK-NEXT:             x = ([0] = 66, [1] = 67, [2] = 68)29// CHECK-NEXT:           }30// CHECK-NEXT:           c3 = 'c'31// CHECK-NEXT:         }32// CHECK-NEXT:          = {33// CHECK-NEXT:           c4 = 'B'34// CHECK-NEXT:           s4 = {35// CHECK-NEXT:             x = ([0] = 67, [1] = 68, [2] = 99)36// CHECK-NEXT:           }37// CHECK-NEXT:         }38// CHECK-NEXT:       }39// CHECK-NEXT:     }40// CHECK-NEXT:      = {41// CHECK-NEXT:       s2 = {42// CHECK-NEXT:         x = ([0] = 98, [1] = 66, [2] = 67)43// CHECK-NEXT:       }44// CHECK-NEXT:       c2 = 'D'45// CHECK-NEXT:     }46// CHECK-NEXT:   }47// CHECK-NEXT:   s1 = {48// CHECK-NEXT:     x = ([0] = 69, [1] = 70, [2] = 71)49// CHECK-NEXT:   }50// CHECK-NEXT: }51// CHECK-NEXT: (lldb) type lookup C52// CHECK-NEXT: struct C {53// CHECK-NEXT:     char c;54// CHECK-NEXT:     int x;55// CHECK-NEXT:     union {56// CHECK-NEXT:         struct {57// CHECK-NEXT:             char c1;58// CHECK-NEXT:             union {59// CHECK-NEXT:                 struct {60// CHECK-NEXT:                     S3 s3;61// CHECK-NEXT:                     char c3;62// CHECK-NEXT:                 };63// CHECK-NEXT:                 struct {64// CHECK-NEXT:                     char c4;65// CHECK-NEXT:                     S3 s4;66// CHECK-NEXT:                 };67// CHECK-NEXT:             };68// CHECK-NEXT:         };69// CHECK-NEXT:         struct {70// CHECK-NEXT:             S3 s2;71// CHECK-NEXT:             char c2;72// CHECK-NEXT:         };73// CHECK-NEXT:     };74// CHECK-NEXT:     S3 s1;75// CHECK-NEXT: }76 77 78 79// Test packed stuct layout.80struct __attribute__((packed, aligned(1))) A {81  char d1;82  int d2;83  int d3;84  char d4;85};86 87struct __attribute__((packed, aligned(1))) B {88  char c;89  union {90    char c[2];91    int i;92  } u;93};94 95// Test struct layout with anonymous union/struct.96struct S3 {97  short x[3];98};99 100struct C {101  char c;102  int x;103  union {104    struct {105      char c1;106      union {107        struct {108          S3 s3;109          char c3;110        };111        struct {112          char c4;113          S3 s4;114        };115      };116      S3 s1;117    };118    struct {119      S3 s2;120      char c2;121    };122  };123};124 125A a = {'a', 1, 2, 'b'};126B b = {'a', {"b"}};127C c = {.c = 'a', .x = 65, .c1 = 'b', .s3 = {66, 67, 68}, .c3 = 'c', .s1={69, 70, 71}};128 129int main() {130  return 0;131}132