// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fms-extensions -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
// RUN: | FileCheck %s --strict-whitespace
// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fms-extensions -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
// RUN: | FileCheck %s -check-prefix CHECK-X64 --strict-whitespace
extern "C" int ;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
// CHECK-LABEL: 0 | struct A{{$}}
// CHECK-NEXT: 0 | (A vbtable pointer)
// CHECK-NEXT: 4 | int a
// CHECK-NEXT: 8 | struct B0 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=8, align=8
// CHECK-NEXT: | nvsize=8, nvalign=8]
// CHECK-X64-LABEL: 0 | struct A{{$}}
// CHECK-X64-NEXT: 0 | (A vbtable pointer)
// CHECK-X64-NEXT: 8 | int a
// CHECK-X64-NEXT: 16 | struct B0 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=16, align=8
// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
;
// CHECK-LABEL: 0 | struct B{{$}}
// CHECK-NEXT: 0 | (B vbtable pointer)
// CHECK-NEXT: 8 | struct B0 b0 (empty)
// CHECK: 16 | int a
// CHECK-NEXT: 24 | struct B0 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=24, align=8
// CHECK-NEXT: | nvsize=24, nvalign=8]
// CHECK-X64-LABEL: 0 | struct B{{$}}
// CHECK-X64-NEXT: 0 | (B vbtable pointer)
// CHECK-X64-NEXT: 8 | struct B0 b0 (empty)
// CHECK-X64: 16 | int a
// CHECK-X64-NEXT: 24 | struct B0 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=24, align=8
// CHECK-X64-NEXT: | nvsize=24, nvalign=8]
;
// CHECK-LABEL: 0 | struct C{{$}}
// CHECK-NEXT: 0 | (C vbtable pointer)
// CHECK-NEXT: 4 | int a
// CHECK-NEXT: 8 | struct B0 (virtual base) (empty)
// CHECK-NEXT: 16 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 24 | struct B2 (virtual base) (empty)
// CHECK-NEXT: 32 | struct B3 (virtual base) (empty)
// CHECK-NEXT: 40 | struct B4 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=40, align=8
// CHECK-NEXT: | nvsize=8, nvalign=8]
// CHECK-X64-LABEL: 0 | struct C{{$}}
// CHECK-X64-NEXT: 0 | (C vbtable pointer)
// CHECK-X64-NEXT: 8 | int a
// CHECK-X64-NEXT: 16 | struct B0 (virtual base) (empty)
// CHECK-X64-NEXT: 24 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 32 | struct B2 (virtual base) (empty)
// CHECK-X64-NEXT: 40 | struct B3 (virtual base) (empty)
// CHECK-X64-NEXT: 48 | struct B4 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=48, align=8
// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
;
// CHECK-LABEL: 0 | struct D{{$}}
// CHECK-NEXT: 0 | struct B0 b0 (empty)
// CHECK: 8 | struct C0 c0
// CHECK-NEXT: 8 | int a
// CHECK: 12 | struct C1 c1
// CHECK-NEXT: 12 | int a
// CHECK: 16 | struct C2 c2
// CHECK-NEXT: 16 | int a
// CHECK: 24 | struct B1 b1 (empty)
// CHECK: 32 | int a
// CHECK-NEXT: | [sizeof=40, align=8
// CHECK-NEXT: | nvsize=40, nvalign=8]
// CHECK-X64-LABEL: 0 | struct D{{$}}
// CHECK-X64-NEXT: 0 | struct B0 b0 (empty)
// CHECK-X64: 8 | struct C0 c0
// CHECK-X64-NEXT: 8 | int a
// CHECK-X64: 12 | struct C1 c1
// CHECK-X64-NEXT: 12 | int a
// CHECK-X64: 16 | struct C2 c2
// CHECK-X64-NEXT: 16 | int a
// CHECK-X64: 24 | struct B1 b1 (empty)
// CHECK-X64: 32 | int a
// CHECK-X64-NEXT: | [sizeof=40, align=8
// CHECK-X64-NEXT: | nvsize=40, nvalign=8]
;
// CHECK-LABEL: 0 | struct E{{$}}
// CHECK-NEXT: 0 | (E vbtable pointer)
// CHECK-NEXT: 4 | int a
// CHECK-NEXT: 8 | struct B0 (virtual base) (empty)
// CHECK-NEXT: 8 | struct C0 (virtual base)
// CHECK-NEXT: 8 | int a
// CHECK-NEXT: 12 | struct C1 (virtual base)
// CHECK-NEXT: 12 | int a
// CHECK-NEXT: 16 | struct C2 (virtual base)
// CHECK-NEXT: 16 | int a
// CHECK-NEXT: 24 | struct B1 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=24, align=8
// CHECK-NEXT: | nvsize=8, nvalign=8]
// CHECK-X64-LABEL: 0 | struct E{{$}}
// CHECK-X64-NEXT: 0 | (E vbtable pointer)
// CHECK-X64-NEXT: 8 | int a
// CHECK-X64-NEXT: 16 | struct B0 (virtual base) (empty)
// CHECK-X64-NEXT: 16 | struct C0 (virtual base)
// CHECK-X64-NEXT: 16 | int a
// CHECK-X64-NEXT: 20 | struct C1 (virtual base)
// CHECK-X64-NEXT: 20 | int a
// CHECK-X64-NEXT: 24 | struct C2 (virtual base)
// CHECK-X64-NEXT: 24 | int a
// CHECK-X64-NEXT: 32 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=32, align=8
// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
;
// CHECK-LABEL: 0 | struct F{{$}}
// CHECK-NEXT: 0 | (F vbtable pointer)
// CHECK-NEXT: 4 | int a
// CHECK-NEXT: 8 | struct C0 (virtual base)
// CHECK-NEXT: 8 | int a
// CHECK-NEXT: 16 | struct B0 (virtual base) (empty)
// CHECK-NEXT: 24 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 24 | struct C1 (virtual base)
// CHECK-NEXT: 24 | int a
// CHECK-NEXT: | [sizeof=32, align=8
// CHECK-NEXT: | nvsize=8, nvalign=8]
// CHECK-X64-LABEL: 0 | struct F{{$}}
// CHECK-X64-NEXT: 0 | (F vbtable pointer)
// CHECK-X64-NEXT: 8 | int a
// CHECK-X64-NEXT: 16 | struct C0 (virtual base)
// CHECK-X64-NEXT: 16 | int a
// CHECK-X64-NEXT: 24 | struct B0 (virtual base) (empty)
// CHECK-X64-NEXT: 32 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 32 | struct C1 (virtual base)
// CHECK-X64-NEXT: 32 | int a
// CHECK-X64-NEXT: | [sizeof=40, align=8
// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
;
// CHECK-LABEL: 0 | struct G{{$}}
// CHECK-NEXT: 0 | struct D0 (primary base)
// CHECK-NEXT: 0 | (D0 vftable pointer)
// CHECK-NEXT: 4 | (G vbtable pointer)
// CHECK-NEXT: 20 | int a
// CHECK-NEXT: 32 | struct C0 (virtual base)
// CHECK-NEXT: 32 | int a
// CHECK-NEXT: 40 | struct B0 (virtual base) (empty)
// CHECK-NEXT: 56 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 56 | struct C1 (virtual base)
// CHECK-NEXT: 56 | int a
// CHECK-NEXT: | [sizeof=64, align=16
// CHECK-NEXT: | nvsize=32, nvalign=16]
// CHECK-X64-LABEL: 0 | struct G{{$}}
// CHECK-X64-NEXT: 0 | struct D0 (primary base)
// CHECK-X64-NEXT: 0 | (D0 vftable pointer)
// CHECK-X64-NEXT: 8 | (G vbtable pointer)
// CHECK-X64-NEXT: 24 | int a
// CHECK-X64-NEXT: 32 | struct C0 (virtual base)
// CHECK-X64-NEXT: 32 | int a
// CHECK-X64-NEXT: 40 | struct B0 (virtual base) (empty)
// CHECK-X64-NEXT: 56 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 56 | struct C1 (virtual base)
// CHECK-X64-NEXT: 56 | int a
// CHECK-X64-NEXT: | [sizeof=64, align=16
// CHECK-X64-NEXT: | nvsize=32, nvalign=16]
;
// CHECK-LABEL: 0 | struct H{{$}}
// CHECK-NEXT: 0 | (H vbtable pointer)
// CHECK-NEXT: 4 | int a
// CHECK-NEXT: 8 | struct C0 (virtual base)
// CHECK-NEXT: 8 | int a
// CHECK-NEXT: 16 | struct B0 (virtual base) (empty)
// CHECK-NEXT: 24 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 44 | (vtordisp for vbase D0)
// CHECK-NEXT: 48 | struct D0 (virtual base)
// CHECK-NEXT: 48 | (D0 vftable pointer)
// CHECK-NEXT: 52 | struct C1 (virtual base)
// CHECK-NEXT: 52 | int a
// CHECK-NEXT: | [sizeof=64, align=16
// CHECK-NEXT: | nvsize=8, nvalign=16]
// CHECK-X64-LABEL: 0 | struct H{{$}}
// CHECK-X64-NEXT: 0 | (H vbtable pointer)
// CHECK-X64-NEXT: 8 | int a
// CHECK-X64-NEXT: 16 | struct C0 (virtual base)
// CHECK-X64-NEXT: 16 | int a
// CHECK-X64-NEXT: 24 | struct B0 (virtual base) (empty)
// CHECK-X64-NEXT: 40 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 60 | (vtordisp for vbase D0)
// CHECK-X64-NEXT: 64 | struct D0 (virtual base)
// CHECK-X64-NEXT: 64 | (D0 vftable pointer)
// CHECK-X64-NEXT: 72 | struct C1 (virtual base)
// CHECK-X64-NEXT: 72 | int a
// CHECK-X64-NEXT: | [sizeof=80, align=16
// CHECK-X64-NEXT: | nvsize=16, nvalign=16]
;
// CHECK-LABEL: 0 | struct I{{$}}
// CHECK-NEXT: 0 | (I vbtable pointer)
// CHECK-NEXT: 32 | int a
// CHECK-NEXT: 64 | struct B0 (virtual base) (empty)
// CHECK-NEXT: 72 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 104 | struct B2 (virtual base) (empty)
// CHECK-NEXT: 136 | struct B3 (virtual base) (empty)
// CHECK-NEXT: 168 | struct B4 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=192, align=32
// CHECK-NEXT: | nvsize=64, nvalign=32]
// CHECK-X64-LABEL: 0 | struct I{{$}}
// CHECK-X64-NEXT: 0 | (I vbtable pointer)
// CHECK-X64-NEXT: 32 | int a
// CHECK-X64-NEXT: 64 | struct B0 (virtual base) (empty)
// CHECK-X64-NEXT: 72 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 104 | struct B2 (virtual base) (empty)
// CHECK-X64-NEXT: 136 | struct B3 (virtual base) (empty)
// CHECK-X64-NEXT: 168 | struct B4 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=192, align=32
// CHECK-X64-NEXT: | nvsize=64, nvalign=32]
;
// CHECK-LABEL: 0 | struct J{{$}}
// CHECK-NEXT: 0 | (J vbtable pointer)
// CHECK-NEXT: 4 | int a
// CHECK-NEXT: 8 | struct B0 (virtual base) (empty)
// CHECK-NEXT: 40 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 72 | struct B2 (virtual base) (empty)
// CHECK-NEXT: 104 | struct B3 (virtual base) (empty)
// CHECK-NEXT: 136 | struct B4 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=160, align=32
// CHECK-NEXT: | nvsize=8, nvalign=32]
// CHECK-X64-LABEL: 0 | struct J{{$}}
// CHECK-X64-NEXT: 0 | (J vbtable pointer)
// CHECK-X64-NEXT: 8 | int a
// CHECK-X64-NEXT: 16 | struct B0 (virtual base) (empty)
// CHECK-X64-NEXT: 40 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 72 | struct B2 (virtual base) (empty)
// CHECK-X64-NEXT: 104 | struct B3 (virtual base) (empty)
// CHECK-X64-NEXT: 136 | struct B4 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=160, align=32
// CHECK-X64-NEXT: | nvsize=16, nvalign=32]
;
// CHECK-LABEL: 0 | struct K{{$}}
// CHECK-NEXT: 0 | (K vbtable pointer)
// CHECK-NEXT: 32 | int a
// CHECK-NEXT: 64 | struct D1 (virtual base) (empty)
// CHECK-NEXT: 72 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 104 | struct B2 (virtual base) (empty)
// CHECK-NEXT: 136 | struct B3 (virtual base) (empty)
// CHECK-NEXT: 168 | struct B4 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=192, align=32
// CHECK-NEXT: | nvsize=64, nvalign=32]
// CHECK-X64-LABEL: 0 | struct K{{$}}
// CHECK-X64-NEXT: 0 | (K vbtable pointer)
// CHECK-X64-NEXT: 32 | int a
// CHECK-X64-NEXT: 64 | struct D1 (virtual base) (empty)
// CHECK-X64-NEXT: 72 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 104 | struct B2 (virtual base) (empty)
// CHECK-X64-NEXT: 136 | struct B3 (virtual base) (empty)
// CHECK-X64-NEXT: 168 | struct B4 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=192, align=32
// CHECK-X64-NEXT: | nvsize=64, nvalign=32]
;
// CHECK-LABEL: 0 | struct L{{$}}
// CHECK-NEXT: 0 | (L vbtable pointer)
// CHECK-NEXT: 32 | int a
// CHECK-NEXT: 64 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 68 | struct D1 (virtual base) (empty)
// CHECK-NEXT: 104 | struct B2 (virtual base) (empty)
// CHECK-NEXT: 136 | struct B3 (virtual base) (empty)
// CHECK-NEXT: 168 | struct B4 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=192, align=32
// CHECK-NEXT: | nvsize=64, nvalign=32]
// CHECK-X64-LABEL: 0 | struct L{{$}}
// CHECK-X64-NEXT: 0 | (L vbtable pointer)
// CHECK-X64-NEXT: 32 | int a
// CHECK-X64-NEXT: 64 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 68 | struct D1 (virtual base) (empty)
// CHECK-X64-NEXT: 104 | struct B2 (virtual base) (empty)
// CHECK-X64-NEXT: 136 | struct B3 (virtual base) (empty)
// CHECK-X64-NEXT: 168 | struct B4 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=192, align=32
// CHECK-X64-NEXT: | nvsize=64, nvalign=32]
;
// CHECK-LABEL: 0 | struct M{{$}}
// CHECK-NEXT: 0 | (M vbtable pointer)
// CHECK-NEXT: 32 | int a
// CHECK-NEXT: 64 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 72 | struct B2 (virtual base) (empty)
// CHECK-NEXT: 100 | struct D1 (virtual base) (empty)
// CHECK-NEXT: 136 | struct B3 (virtual base) (empty)
// CHECK-NEXT: 168 | struct B4 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=192, align=32
// CHECK-NEXT: | nvsize=64, nvalign=32]
// CHECK-X64-LABEL: 0 | struct M{{$}}
// CHECK-X64-NEXT: 0 | (M vbtable pointer)
// CHECK-X64-NEXT: 32 | int a
// CHECK-X64-NEXT: 64 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 72 | struct B2 (virtual base) (empty)
// CHECK-X64-NEXT: 100 | struct D1 (virtual base) (empty)
// CHECK-X64-NEXT: 136 | struct B3 (virtual base) (empty)
// CHECK-X64-NEXT: 168 | struct B4 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=192, align=32
// CHECK-X64-NEXT: | nvsize=64, nvalign=32]
;
// CHECK-LABEL: 0 | struct N{{$}}
// CHECK-NEXT: 0 | (N vbtable pointer)
// CHECK-NEXT: 32 | int a
// CHECK-NEXT: 64 | struct C0 (virtual base)
// CHECK-NEXT: 64 | int a
// CHECK-NEXT: 72 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 100 | struct D1 (virtual base) (empty)
// CHECK-NEXT: 136 | struct B2 (virtual base) (empty)
// CHECK-NEXT: 168 | struct B3 (virtual base) (empty)
// CHECK-NEXT: 200 | struct B4 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=224, align=32
// CHECK-NEXT: | nvsize=64, nvalign=32]
// CHECK-X64-LABEL: 0 | struct N{{$}}
// CHECK-X64-NEXT: 0 | (N vbtable pointer)
// CHECK-X64-NEXT: 32 | int a
// CHECK-X64-NEXT: 64 | struct C0 (virtual base)
// CHECK-X64-NEXT: 64 | int a
// CHECK-X64-NEXT: 72 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 100 | struct D1 (virtual base) (empty)
// CHECK-X64-NEXT: 136 | struct B2 (virtual base) (empty)
// CHECK-X64-NEXT: 168 | struct B3 (virtual base) (empty)
// CHECK-X64-NEXT: 200 | struct B4 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=224, align=32
// CHECK-X64-NEXT: | nvsize=64, nvalign=32]
;
// CHECK-LABEL: 0 | struct O{{$}}
// CHECK-NEXT: 0 | (O vbtable pointer)
// CHECK-NEXT: 32 | int a
// CHECK-NEXT: 64 | struct C0 (virtual base)
// CHECK-NEXT: 64 | int a
// CHECK-NEXT: 72 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 104 | struct B2 (virtual base) (empty)
// CHECK-NEXT: 132 | struct D1 (virtual base) (empty)
// CHECK-NEXT: 168 | struct B3 (virtual base) (empty)
// CHECK-NEXT: 200 | struct B4 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=224, align=32
// CHECK-NEXT: | nvsize=64, nvalign=32]
// CHECK-X64-LABEL: 0 | struct O{{$}}
// CHECK-X64-NEXT: 0 | (O vbtable pointer)
// CHECK-X64-NEXT: 32 | int a
// CHECK-X64-NEXT: 64 | struct C0 (virtual base)
// CHECK-X64-NEXT: 64 | int a
// CHECK-X64-NEXT: 72 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 104 | struct B2 (virtual base) (empty)
// CHECK-X64-NEXT: 132 | struct D1 (virtual base) (empty)
// CHECK-X64-NEXT: 168 | struct B3 (virtual base) (empty)
// CHECK-X64-NEXT: 200 | struct B4 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=224, align=32
// CHECK-X64-NEXT: | nvsize=64, nvalign=32]
;
// CHECK-LABEL: 0 | struct P{{$}}
// CHECK-NEXT: 0 | (P vbtable pointer)
// CHECK-NEXT: 32 | int a
// CHECK-NEXT: 64 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 64 | struct C0 (virtual base)
// CHECK-NEXT: 64 | int a
// CHECK-NEXT: 68 | struct D1 (virtual base) (empty)
// CHECK-NEXT: 104 | struct B2 (virtual base) (empty)
// CHECK-NEXT: 136 | struct B3 (virtual base) (empty)
// CHECK-NEXT: 168 | struct B4 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=192, align=32
// CHECK-NEXT: | nvsize=64, nvalign=32]
// CHECK-X64-LABEL: 0 | struct P{{$}}
// CHECK-X64-NEXT: 0 | (P vbtable pointer)
// CHECK-X64-NEXT: 32 | int a
// CHECK-X64-NEXT: 64 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 64 | struct C0 (virtual base)
// CHECK-X64-NEXT: 64 | int a
// CHECK-X64-NEXT: 68 | struct D1 (virtual base) (empty)
// CHECK-X64-NEXT: 104 | struct B2 (virtual base) (empty)
// CHECK-X64-NEXT: 136 | struct B3 (virtual base) (empty)
// CHECK-X64-NEXT: 168 | struct B4 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=192, align=32
// CHECK-X64-NEXT: | nvsize=64, nvalign=32]
;
// CHECK-LABEL: 0 | struct Q{{$}}
// CHECK-NEXT: 0 | (Q vbtable pointer)
// CHECK-NEXT: 32 | int a
// CHECK-NEXT: 64 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 64 | struct C0 (virtual base)
// CHECK-NEXT: 64 | int a
// CHECK-NEXT: 72 | struct B2 (virtual base) (empty)
// CHECK-NEXT: 100 | struct D1 (virtual base) (empty)
// CHECK-NEXT: 136 | struct B3 (virtual base) (empty)
// CHECK-NEXT: 168 | struct B4 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=192, align=32
// CHECK-NEXT: | nvsize=64, nvalign=32]
// CHECK-X64-LABEL: 0 | struct Q{{$}}
// CHECK-X64-NEXT: 0 | (Q vbtable pointer)
// CHECK-X64-NEXT: 32 | int a
// CHECK-X64-NEXT: 64 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 64 | struct C0 (virtual base)
// CHECK-X64-NEXT: 64 | int a
// CHECK-X64-NEXT: 72 | struct B2 (virtual base) (empty)
// CHECK-X64-NEXT: 100 | struct D1 (virtual base) (empty)
// CHECK-X64-NEXT: 136 | struct B3 (virtual base) (empty)
// CHECK-X64-NEXT: 168 | struct B4 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=192, align=32
// CHECK-X64-NEXT: | nvsize=64, nvalign=32]
;
// CHECK-LABEL: 0 | struct R{{$}}
// CHECK-NEXT: 0 | (R vbtable pointer)
// CHECK-NEXT: 32 | int a
// CHECK-NEXT: 64 | struct B0 (virtual base) (empty)
// CHECK-NEXT: 72 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 104 | struct B2 (virtual base) (empty)
// CHECK-NEXT: 104 | struct C0 (virtual base)
// CHECK-NEXT: 104 | int a
// CHECK-NEXT: 112 | struct B3 (virtual base) (empty)
// CHECK-NEXT: 136 | struct B4 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=160, align=32
// CHECK-NEXT: | nvsize=64, nvalign=32]
// CHECK-X64-LABEL: 0 | struct R{{$}}
// CHECK-X64-NEXT: 0 | (R vbtable pointer)
// CHECK-X64-NEXT: 32 | int a
// CHECK-X64-NEXT: 64 | struct B0 (virtual base) (empty)
// CHECK-X64-NEXT: 72 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 104 | struct B2 (virtual base) (empty)
// CHECK-X64-NEXT: 104 | struct C0 (virtual base)
// CHECK-X64-NEXT: 104 | int a
// CHECK-X64-NEXT: 112 | struct B3 (virtual base) (empty)
// CHECK-X64-NEXT: 136 | struct B4 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=160, align=32
// CHECK-X64-NEXT: | nvsize=64, nvalign=32]
;
// CHECK-LABEL: 0 | struct S{{$}}
// CHECK-NEXT: 0 | (S vbtable pointer)
// CHECK-NEXT: 32 | int a
// CHECK-NEXT: 64 | struct B0 (virtual base) (empty)
// CHECK-NEXT: 72 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 72 | struct C0 (virtual base)
// CHECK-NEXT: 72 | int a
// CHECK-NEXT: 80 | struct B2 (virtual base) (empty)
// CHECK-NEXT: 104 | struct B3 (virtual base) (empty)
// CHECK-NEXT: 136 | struct B4 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=160, align=32
// CHECK-NEXT: | nvsize=64, nvalign=32]
// CHECK-X64-LABEL: 0 | struct S{{$}}
// CHECK-X64-NEXT: 0 | (S vbtable pointer)
// CHECK-X64-NEXT: 32 | int a
// CHECK-X64-NEXT: 64 | struct B0 (virtual base) (empty)
// CHECK-X64-NEXT: 72 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 72 | struct C0 (virtual base)
// CHECK-X64-NEXT: 72 | int a
// CHECK-X64-NEXT: 80 | struct B2 (virtual base) (empty)
// CHECK-X64-NEXT: 104 | struct B3 (virtual base) (empty)
// CHECK-X64-NEXT: 136 | struct B4 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=160, align=32
// CHECK-X64-NEXT: | nvsize=64, nvalign=32]
;
// CHECK-LABEL: 0 | struct T{{$}}
// CHECK-NEXT: 0 | (T vbtable pointer)
// CHECK-NEXT: 16 | int a
// CHECK-NEXT: 32 | struct B0 (virtual base) (empty)
// CHECK-NEXT: 40 | struct B1 (virtual base) (empty)
// CHECK-NEXT: 40 | struct C0 (virtual base)
// CHECK-NEXT: 40 | int a
// CHECK-NEXT: 44 | struct D2 (virtual base)
// CHECK-NEXT: 44 | int[8] a
// CHECK-NEXT: 80 | struct B2 (virtual base) (empty)
// CHECK-NEXT: 88 | struct B3 (virtual base) (empty)
// CHECK-NEXT: 104 | struct B4 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=112, align=16
// CHECK-NEXT: | nvsize=32, nvalign=16]
// CHECK-X64-LABEL: 0 | struct T{{$}}
// CHECK-X64-NEXT: 0 | (T vbtable pointer)
// CHECK-X64-NEXT: 16 | int a
// CHECK-X64-NEXT: 32 | struct B0 (virtual base) (empty)
// CHECK-X64-NEXT: 40 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: 40 | struct C0 (virtual base)
// CHECK-X64-NEXT: 40 | int a
// CHECK-X64-NEXT: 44 | struct D2 (virtual base)
// CHECK-X64-NEXT: 44 | int[8] a
// CHECK-X64-NEXT: 80 | struct B2 (virtual base) (empty)
// CHECK-X64-NEXT: 88 | struct B3 (virtual base) (empty)
// CHECK-X64-NEXT: 104 | struct B4 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=112, align=16
// CHECK-X64-NEXT: | nvsize=32, nvalign=16]
;
// CHECK-LABEL: 0 | struct U{{$}}
// CHECK-NEXT: 0 | (U vbtable pointer)
// CHECK-NEXT: 4 | int a
// CHECK-NEXT: 8 | struct B0 (virtual base) (empty)
// CHECK-NEXT: 40 | struct B1 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=64, align=32
// CHECK-NEXT: | nvsize=8, nvalign=32]
// CHECK-X64-LABEL: 0 | struct U{{$}}
// CHECK-X64-NEXT: 0 | (U vbtable pointer)
// CHECK-X64-NEXT: 8 | int a
// CHECK-X64-NEXT: 16 | struct B0 (virtual base) (empty)
// CHECK-X64-NEXT: 40 | struct B1 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=64, align=32
// CHECK-X64-NEXT: | nvsize=16, nvalign=32]
;
// CHECK-LABEL: 0 | struct V{{$}}
// CHECK-NEXT: 0 | (V vbtable pointer)
// CHECK-NEXT: 4 | int a
// CHECK-NEXT: 8 | struct D1 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=32, align=32
// CHECK-NEXT: | nvsize=8, nvalign=32]
// CHECK-X64-LABEL: 0 | struct V{{$}}
// CHECK-X64-NEXT: 0 | (V vbtable pointer)
// CHECK-X64-NEXT: 8 | int a
// CHECK-X64-NEXT: 16 | struct D1 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=32, align=32
// CHECK-X64-NEXT: | nvsize=16, nvalign=32]
;
;
;
// CHECK-LABEL: 0 | struct T3{{$}}
// CHECK-NEXT: 0 | (T3 vbtable pointer)
// CHECK-NEXT: 8 | long long a
// CHECK-NEXT: 16 | struct T1 (virtual base)
// CHECK-NEXT: 16 | struct T0 (base) (empty)
// CHECK-NEXT: 16 | char a
// CHECK-NEXT: 24 | struct T0 (virtual base) (empty)
// CHECK-NEXT: | [sizeof=24, align=8
// CHECK-NEXT: | nvsize=16, nvalign=8]
// CHECK-X64-LABEL: 0 | struct T3{{$}}
// CHECK-X64-NEXT: 0 | (T3 vbtable pointer)
// CHECK-X64-NEXT: 8 | long long a
// CHECK-X64-NEXT: 16 | struct T1 (virtual base)
// CHECK-X64-NEXT: 16 | struct T0 (base) (empty)
// CHECK-X64-NEXT: 16 | char a
// CHECK-X64-NEXT: 24 | struct T0 (virtual base) (empty)
// CHECK-X64-NEXT: | [sizeof=24, align=8
// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
;
;
;
;
// CHECK-LABEL: 0 | struct Q0D{{$}}
// CHECK-NEXT: 0 | struct Q0C (base)
// CHECK-NEXT: 0 | (Q0C vbtable pointer)
// CHECK-NEXT: 4 | char Q0CField
// CHECK-NEXT: 8 | struct Q0A (base) (empty)
// CHECK-NEXT: 8 | struct Q0A (virtual base) (empty)
// CHECK-NEXT: 8 | struct Q0B (virtual base)
// CHECK-NEXT: 8 | char Q0BField
// CHECK-NEXT: | [sizeof=9, align=4
// CHECK-NEXT: | nvsize=8, nvalign=4]
// CHECK-X64-LABEL: 0 | struct Q0D{{$}}
// CHECK-X64-NEXT: 0 | struct Q0C (base)
// CHECK-X64-NEXT: 0 | (Q0C vbtable pointer)
// CHECK-X64-NEXT: 8 | char Q0CField
// CHECK-X64-NEXT: 16 | struct Q0A (base) (empty)
// CHECK-X64-NEXT: 16 | struct Q0A (virtual base) (empty)
// CHECK-X64-NEXT: 16 | struct Q0B (virtual base)
// CHECK-X64-NEXT: 16 | char Q0BField
// CHECK-X64-NEXT: | [sizeof=24, align=8
// CHECK-X64-NEXT: | nvsize=16, nvalign=8]
int a;