brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.6 KiB · 224594e Raw
229 lines · cpp
1// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts %s 2>/dev/null \2// RUN:            | FileCheck %s3// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts %s 2>/dev/null \4// RUN:            | FileCheck %s -check-prefix CHECK-X645 6 7struct U { char a; };8struct V { };9struct W { };10struct X : virtual V { char a; };11struct Y : virtual V { char a; };12struct Z : Y { };13 14struct A : X, W  { char a; };15 16// CHECK: *** Dumping AST Record Layout17// CHECK: *** Dumping AST Record Layout18// CHECK: *** Dumping AST Record Layout19// CHECK: *** Dumping AST Record Layout20// CHECK-NEXT:    0 | struct A21// CHECK-NEXT:    0 |   struct X (base)22// CHECK-NEXT:    0 |     (X vbtable pointer)23// CHECK-NEXT:    4 |     char a24// CHECK-NEXT:    9 |   struct W (base) (empty)25// CHECK-NEXT:    9 |   char a26// CHECK-NEXT:   12 |   struct V (virtual base) (empty)27// CHECK-NEXT:      | [sizeof=12, align=428// CHECK-NEXT:      |  nvsize=12, nvalign=4]29// CHECK-X64: *** Dumping AST Record Layout30// CHECK-X64: *** Dumping AST Record Layout31// CHECK-X64: *** Dumping AST Record Layout32// CHECK-X64: *** Dumping AST Record Layout33// CHECK-X64-NEXT:    0 | struct A34// CHECK-X64-NEXT:    0 |   struct X (base)35// CHECK-X64-NEXT:    0 |     (X vbtable pointer)36// CHECK-X64-NEXT:    8 |     char a37// CHECK-X64-NEXT:   17 |   struct W (base) (empty)38// CHECK-X64-NEXT:   17 |   char a39// CHECK-X64-NEXT:   24 |   struct V (virtual base) (empty)40// CHECK-X64-NEXT:      | [sizeof=24, align=841// CHECK-X64-NEXT:      |  nvsize=24, nvalign=8]42 43struct B : X, U, W  { char a; };44 45// CHECK: *** Dumping AST Record Layout46// CHECK: *** Dumping AST Record Layout47// CHECK-NEXT:    0 | struct B48// CHECK-NEXT:    0 |   struct X (base)49// CHECK-NEXT:    0 |     (X vbtable pointer)50// CHECK-NEXT:    4 |     char a51// CHECK-NEXT:    8 |   struct U (base)52// CHECK-NEXT:    8 |     char a53// CHECK-NEXT:    9 |   struct W (base) (empty)54// CHECK-NEXT:    9 |   char a55// CHECK-NEXT:   12 |   struct V (virtual base) (empty)56// CHECK-NEXT:      | [sizeof=12, align=457// CHECK-NEXT:      |  nvsize=12, nvalign=4]58// CHECK-X64: *** Dumping AST Record Layout59// CHECK-X64: *** Dumping AST Record Layout60// CHECK-X64-NEXT:    0 | struct B61// CHECK-X64-NEXT:    0 |   struct X (base)62// CHECK-X64-NEXT:    0 |     (X vbtable pointer)63// CHECK-X64-NEXT:    8 |     char a64// CHECK-X64-NEXT:   16 |   struct U (base)65// CHECK-X64-NEXT:   16 |     char a66// CHECK-X64-NEXT:   17 |   struct W (base) (empty)67// CHECK-X64-NEXT:   17 |   char a68// CHECK-X64-NEXT:   24 |   struct V (virtual base) (empty)69// CHECK-X64-NEXT:      | [sizeof=24, align=870// CHECK-X64-NEXT:      |  nvsize=24, nvalign=8]71 72struct C : X, V, W  { char a; };73 74// CHECK: *** Dumping AST Record Layout75// CHECK-NEXT:    0 | struct C76// CHECK-NEXT:    0 |   struct X (base)77// CHECK-NEXT:    0 |     (X vbtable pointer)78// CHECK-NEXT:    4 |     char a79// CHECK-NEXT:    9 |   struct V (base) (empty)80// CHECK-NEXT:   10 |   struct W (base) (empty)81// CHECK-NEXT:   10 |   char a82// CHECK-NEXT:   12 |   struct V (virtual base) (empty)83// CHECK-NEXT:      | [sizeof=12, align=484// CHECK-NEXT:      |  nvsize=12, nvalign=4]85// CHECK-X64: *** Dumping AST Record Layout86// CHECK-X64-NEXT:    0 | struct C87// CHECK-X64-NEXT:    0 |   struct X (base)88// CHECK-X64-NEXT:    0 |     (X vbtable pointer)89// CHECK-X64-NEXT:    8 |     char a90// CHECK-X64-NEXT:   17 |   struct V (base) (empty)91// CHECK-X64-NEXT:   18 |   struct W (base) (empty)92// CHECK-X64-NEXT:   18 |   char a93// CHECK-X64-NEXT:   24 |   struct V (virtual base) (empty)94// CHECK-X64-NEXT:      | [sizeof=24, align=895// CHECK-X64-NEXT:      |  nvsize=24, nvalign=8]96 97struct D : X, U, V, W  { char a; };98 99// CHECK: *** Dumping AST Record Layout100// CHECK-NEXT:    0 | struct D101// CHECK-NEXT:    0 |   struct X (base)102// CHECK-NEXT:    0 |     (X vbtable pointer)103// CHECK-NEXT:    4 |     char a104// CHECK-NEXT:    8 |   struct U (base)105// CHECK-NEXT:    8 |     char a106// CHECK-NEXT:    9 |   struct V (base) (empty)107// CHECK-NEXT:   10 |   struct W (base) (empty)108// CHECK-NEXT:   10 |   char a109// CHECK-NEXT:   12 |   struct V (virtual base) (empty)110// CHECK-NEXT:      | [sizeof=12, align=4111// CHECK-NEXT:      |  nvsize=12, nvalign=4]112// CHECK-X64: *** Dumping AST Record Layout113// CHECK-X64-NEXT:    0 | struct D114// CHECK-X64-NEXT:    0 |   struct X (base)115// CHECK-X64-NEXT:    0 |     (X vbtable pointer)116// CHECK-X64-NEXT:    8 |     char a117// CHECK-X64-NEXT:   16 |   struct U (base)118// CHECK-X64-NEXT:   16 |     char a119// CHECK-X64-NEXT:   17 |   struct V (base) (empty)120// CHECK-X64-NEXT:   18 |   struct W (base) (empty)121// CHECK-X64-NEXT:   18 |   char a122// CHECK-X64-NEXT:   24 |   struct V (virtual base) (empty)123// CHECK-X64-NEXT:      | [sizeof=24, align=8124// CHECK-X64-NEXT:      |  nvsize=24, nvalign=8]125 126struct E : X, U, Y, V, W  { char a; };127 128// CHECK: *** Dumping AST Record Layout129// CHECK: *** Dumping AST Record Layout130// CHECK-NEXT:    0 | struct E131// CHECK-NEXT:    0 |   struct X (base)132// CHECK-NEXT:    0 |     (X vbtable pointer)133// CHECK-NEXT:    4 |     char a134// CHECK-NEXT:    8 |   struct U (base)135// CHECK-NEXT:    8 |     char a136// CHECK-NEXT:   12 |   struct Y (base)137// CHECK-NEXT:   12 |     (Y vbtable pointer)138// CHECK-NEXT:   16 |     char a139// CHECK-NEXT:   21 |   struct V (base) (empty)140// CHECK-NEXT:   22 |   struct W (base) (empty)141// CHECK-NEXT:   22 |   char a142// CHECK-NEXT:   24 |   struct V (virtual base) (empty)143// CHECK-NEXT:      | [sizeof=24, align=4144// CHECK-NEXT:      |  nvsize=24, nvalign=4]145// CHECK-X64: *** Dumping AST Record Layout146// CHECK-X64: *** Dumping AST Record Layout147// CHECK-X64-NEXT:    0 | struct E148// CHECK-X64-NEXT:    0 |   struct X (base)149// CHECK-X64-NEXT:    0 |     (X vbtable pointer)150// CHECK-X64-NEXT:    8 |     char a151// CHECK-X64-NEXT:   16 |   struct U (base)152// CHECK-X64-NEXT:   16 |     char a153// CHECK-X64-NEXT:   24 |   struct Y (base)154// CHECK-X64-NEXT:   24 |     (Y vbtable pointer)155// CHECK-X64-NEXT:   32 |     char a156// CHECK-X64-NEXT:   41 |   struct V (base) (empty)157// CHECK-X64-NEXT:   42 |   struct W (base) (empty)158// CHECK-X64-NEXT:   42 |   char a159// CHECK-X64-NEXT:   48 |   struct V (virtual base) (empty)160// CHECK-X64-NEXT:      | [sizeof=48, align=8161// CHECK-X64-NEXT:      |  nvsize=48, nvalign=8]162 163struct F : Z, W  { char a; };164 165// CHECK: *** Dumping AST Record Layout166// CHECK: *** Dumping AST Record Layout167// CHECK-NEXT:    0 | struct F168// CHECK-NEXT:    0 |   struct Z (base)169// CHECK-NEXT:    0 |     struct Y (base)170// CHECK-NEXT:    0 |       (Y vbtable pointer)171// CHECK-NEXT:    4 |       char a172// CHECK-NEXT:    9 |   struct W (base) (empty)173// CHECK-NEXT:    9 |   char a174// CHECK-NEXT:   12 |   struct V (virtual base) (empty)175// CHECK-NEXT:      | [sizeof=12, align=4176// CHECK-NEXT:      |  nvsize=12, nvalign=4]177// CHECK-X64: *** Dumping AST Record Layout178// CHECK-X64: *** Dumping AST Record Layout179// CHECK-X64-NEXT:    0 | struct F180// CHECK-X64-NEXT:    0 |   struct Z (base)181// CHECK-X64-NEXT:    0 |     struct Y (base)182// CHECK-X64-NEXT:    0 |       (Y vbtable pointer)183// CHECK-X64-NEXT:    8 |       char a184// CHECK-X64-NEXT:   17 |   struct W (base) (empty)185// CHECK-X64-NEXT:   17 |   char a186// CHECK-X64-NEXT:   24 |   struct V (virtual base) (empty)187// CHECK-X64-NEXT:      | [sizeof=24, align=8188// CHECK-X64-NEXT:      |  nvsize=24, nvalign=8]189 190struct G : X, W, Y, V  { char a; };191 192// CHECK: *** Dumping AST Record Layout193// CHECK-NEXT:    0 | struct G194// CHECK-NEXT:    0 |   struct X (base)195// CHECK-NEXT:    0 |     (X vbtable pointer)196// CHECK-NEXT:    4 |     char a197// CHECK-NEXT:    9 |   struct W (base) (empty)198// CHECK-NEXT:   12 |   struct Y (base)199// CHECK-NEXT:   12 |     (Y vbtable pointer)200// CHECK-NEXT:   16 |     char a201// CHECK-NEXT:   21 |   struct V (base) (empty)202// CHECK-NEXT:   21 |   char a203// CHECK-NEXT:   24 |   struct V (virtual base) (empty)204// CHECK-NEXT:      | [sizeof=24, align=4205// CHECK-NEXT:      |  nvsize=24, nvalign=4]206// CHECK-X64: *** Dumping AST Record Layout207// CHECK-X64-NEXT:    0 | struct G208// CHECK-X64-NEXT:    0 |   struct X (base)209// CHECK-X64-NEXT:    0 |     (X vbtable pointer)210// CHECK-X64-NEXT:    8 |     char a211// CHECK-X64-NEXT:   17 |   struct W (base) (empty)212// CHECK-X64-NEXT:   24 |   struct Y (base)213// CHECK-X64-NEXT:   24 |     (Y vbtable pointer)214// CHECK-X64-NEXT:   32 |     char a215// CHECK-X64-NEXT:   41 |   struct V (base) (empty)216// CHECK-X64-NEXT:   41 |   char a217// CHECK-X64-NEXT:   48 |   struct V (virtual base) (empty)218// CHECK-X64-NEXT:      | [sizeof=48, align=8219// CHECK-X64-NEXT:      |  nvsize=48, nvalign=8]220 221int a[222sizeof(A)+223sizeof(B)+224sizeof(C)+225sizeof(D)+226sizeof(E)+227sizeof(F)+228sizeof(G)];229