Home | History | Annotate | Download | only in Layout
      1 // RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>&1 \
      2 // RUN:            | FileCheck %s
      3 // RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
      4 // RUN:            | FileCheck %s -check-prefix CHECK-X64
      5 
      6 struct B0 { int a; };
      7 struct B1 { int a; };
      8 
      9 struct A : virtual B0 { char a : 1; };
     10 
     11 // CHECK: *** Dumping AST Record Layout
     12 // CHECK: *** Dumping AST Record Layout
     13 // CHECK-NEXT:    0 | struct A
     14 // CHECK-NEXT:    0 |   (A vbtable pointer)
     15 // CHECK-NEXT:    4:0-0 |   char a
     16 // CHECK-NEXT:    8 |   struct B0 (virtual base)
     17 // CHECK-NEXT:    8 |     int a
     18 // CHECK-NEXT:      | [sizeof=12, align=4
     19 // CHECK-NEXT:      |  nvsize=8, nvalign=4]
     20 // CHECK-X64: *** Dumping AST Record Layout
     21 // CHECK-X64: *** Dumping AST Record Layout
     22 // CHECK-X64-NEXT:    0 | struct A
     23 // CHECK-X64-NEXT:    0 |   (A vbtable pointer)
     24 // CHECK-X64-NEXT:    8:0-0 |   char a
     25 // CHECK-X64-NEXT:   16 |   struct B0 (virtual base)
     26 // CHECK-X64-NEXT:   16 |     int a
     27 // CHECK-X64-NEXT:      | [sizeof=24, align=8
     28 // CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
     29 
     30 struct B : virtual B0 { short a : 1; };
     31 
     32 // CHECK: *** Dumping AST Record Layout
     33 // CHECK-NEXT:    0 | struct B
     34 // CHECK-NEXT:    0 |   (B vbtable pointer)
     35 // CHECK-NEXT:    4:0-0 |   short a
     36 // CHECK-NEXT:    8 |   struct B0 (virtual base)
     37 // CHECK-NEXT:    8 |     int a
     38 // CHECK-NEXT:      | [sizeof=12, align=4
     39 // CHECK-NEXT:      |  nvsize=8, nvalign=4]
     40 // CHECK-X64: *** Dumping AST Record Layout
     41 // CHECK-X64-NEXT:    0 | struct B
     42 // CHECK-X64-NEXT:    0 |   (B vbtable pointer)
     43 // CHECK-X64-NEXT:    8:0-0 |   short a
     44 // CHECK-X64-NEXT:   16 |   struct B0 (virtual base)
     45 // CHECK-X64-NEXT:   16 |     int a
     46 // CHECK-X64-NEXT:      | [sizeof=24, align=8
     47 // CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
     48 
     49 struct C : virtual B0 { char a : 1; char : 0; };
     50 
     51 // CHECK: *** Dumping AST Record Layout
     52 // CHECK-NEXT:    0 | struct C
     53 // CHECK-NEXT:    0 |   (C vbtable pointer)
     54 // CHECK-NEXT:    4:0-0 |   char a
     55 // CHECK-NEXT:    5:- |   char
     56 // CHECK-NEXT:    8 |   struct B0 (virtual base)
     57 // CHECK-NEXT:    8 |     int a
     58 // CHECK-NEXT:      | [sizeof=12, align=4
     59 // CHECK-NEXT:      |  nvsize=8, nvalign=4]
     60 // CHECK-X64: *** Dumping AST Record Layout
     61 // CHECK-X64-NEXT:    0 | struct C
     62 // CHECK-X64-NEXT:    0 |   (C vbtable pointer)
     63 // CHECK-X64-NEXT:    8:0-0 |   char a
     64 // CHECK-X64-NEXT:    9:- |   char
     65 // CHECK-X64-NEXT:   16 |   struct B0 (virtual base)
     66 // CHECK-X64-NEXT:   16 |     int a
     67 // CHECK-X64-NEXT:      | [sizeof=24, align=8
     68 // CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
     69 
     70 struct D : virtual B0 { char a : 1; char b; };
     71 
     72 // CHECK: *** Dumping AST Record Layout
     73 // CHECK-NEXT:    0 | struct D
     74 // CHECK-NEXT:    0 |   (D vbtable pointer)
     75 // CHECK-NEXT:    4:0-0 |   char a
     76 // CHECK-NEXT:    5 |   char b
     77 // CHECK-NEXT:    8 |   struct B0 (virtual base)
     78 // CHECK-NEXT:    8 |     int a
     79 // CHECK-NEXT:      | [sizeof=12, align=4
     80 // CHECK-NEXT:      |  nvsize=8, nvalign=4]
     81 // CHECK-X64: *** Dumping AST Record Layout
     82 // CHECK-X64-NEXT:    0 | struct D
     83 // CHECK-X64-NEXT:    0 |   (D vbtable pointer)
     84 // CHECK-X64-NEXT:    8:0-0 |   char a
     85 // CHECK-X64-NEXT:    9 |   char b
     86 // CHECK-X64-NEXT:   16 |   struct B0 (virtual base)
     87 // CHECK-X64-NEXT:   16 |     int a
     88 // CHECK-X64-NEXT:      | [sizeof=24, align=8
     89 // CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
     90 
     91 struct E : virtual B0, virtual B1 { long long : 1; };
     92 // CHECK: *** Dumping AST Record Layout
     93 // CHECK: *** Dumping AST Record Layout
     94 // CHECK-NEXT:    0 | struct E
     95 // CHECK-NEXT:    0 |   (E vbtable pointer)
     96 // CHECK-NEXT:    8:0-0 |   long long
     97 // CHECK-NEXT:   16 |   struct B0 (virtual base)
     98 // CHECK-NEXT:   16 |     int a
     99 // CHECK-NEXT:   20 |   struct B1 (virtual base)
    100 // CHECK-NEXT:   20 |     int a
    101 // CHECK-NEXT:      | [sizeof=24, align=8
    102 // CHECK-NEXT:      |  nvsize=16, nvalign=8]
    103 // CHECK-X64: *** Dumping AST Record Layout
    104 // CHECK-X64: *** Dumping AST Record Layout
    105 // CHECK-X64-NEXT:    0 | struct E
    106 // CHECK-X64-NEXT:    0 |   (E vbtable pointer)
    107 // CHECK-X64-NEXT:    8:0-0 |   long long
    108 // CHECK-X64-NEXT:   16 |   struct B0 (virtual base)
    109 // CHECK-X64-NEXT:   16 |     int a
    110 // CHECK-X64-NEXT:   20 |   struct B1 (virtual base)
    111 // CHECK-X64-NEXT:   20 |     int a
    112 // CHECK-X64-NEXT:      | [sizeof=24, align=8
    113 // CHECK-X64-NEXT:      |  nvsize=16, nvalign=8]
    114 
    115 int a[
    116 sizeof(A)+
    117 sizeof(B)+
    118 sizeof(C)+
    119 sizeof(D)+
    120 sizeof(E)];
    121