blob: 6ce8a4b7203aeebce0085df8e776d3622ecf72ff [file] [log] [blame]
Warren Huntbd1b0c62013-10-14 19:08:58 +00001// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fsyntax-only -cxx-abi microsoft %s 2>&1 \
2// RUN: | FileCheck %s
3
4extern "C" int printf(const char *fmt, ...);
5
6struct B0 { char a; B0() : a(0xB0) {} };
7struct __declspec(align(1)) B1 {};
8
9struct A : virtual B0 {};
10
11// CHECK: *** Dumping AST Record Layout
12// CHECK: 0 | struct A
13// CHECK: 0 | (A vbtable pointer)
14// CHECK: 4 | struct B0 (virtual base)
15// CHECK: 4 | char a
16// CHECK: | [sizeof=5, align=4
17// CHECK: | nvsize=4, nvalign=4]
18
19struct __declspec(align(1)) B : virtual B0 {};
20
21// CHECK: *** Dumping AST Record Layout
22// CHECK: 0 | struct B
23// CHECK: 0 | (B vbtable pointer)
24// CHECK: 4 | struct B0 (virtual base)
25// CHECK: 4 | char a
26// CHECK: | [sizeof=8, align=4
27// CHECK: | nvsize=4, nvalign=4]
28
29struct C : virtual B0 { int a; C() : a(0xC) {} };
30
31// CHECK: *** Dumping AST Record Layout
32// CHECK: 0 | struct C
33// CHECK: 0 | (C vbtable pointer)
34// CHECK: 4 | int a
35// CHECK: 8 | struct B0 (virtual base)
36// CHECK: 8 | char a
37// CHECK: | [sizeof=9, align=4
38// CHECK: | nvsize=8, nvalign=4]
39
40struct D : virtual B0 { __declspec(align(1)) int a; D() : a(0xD) {} };
41
42// CHECK: *** Dumping AST Record Layout
43// CHECK: 0 | struct D
44// CHECK: 0 | (D vbtable pointer)
45// CHECK: 4 | int a
46// CHECK: 8 | struct B0 (virtual base)
47// CHECK: 8 | char a
48// CHECK: | [sizeof=12, align=4
49// CHECK: | nvsize=8, nvalign=4]
50
51struct E : virtual B0, virtual B1 {};
52
53// CHECK: *** Dumping AST Record Layout
54// CHECK: 0 | struct E
55// CHECK: 0 | (E vbtable pointer)
56// CHECK: 4 | struct B0 (virtual base)
57// CHECK: 4 | char a
58// CHECK: 5 | struct B1 (virtual base) (empty)
59// CHECK: | [sizeof=8, align=4
60// CHECK: | nvsize=4, nvalign=4]
Reid Klecknerbd5bd4b2013-10-14 21:14:05 +000061
62struct F { char a; virtual ~F(); };
63
64// CHECK: *** Dumping AST Record Layout
65// CHECK: 0 | struct F
66// CHECK: 0 | (F vftable pointer)
67// CHECK: 4 | char a
68// CHECK: | [sizeof=8, align=4
69// CHECK: | nvsize=8, nvalign=4]
70
Warren Huntbd1b0c62013-10-14 19:08:58 +000071int a[
72sizeof(A)+
73sizeof(B)+
74sizeof(C)+
75sizeof(D)+
Reid Klecknerbd5bd4b2013-10-14 21:14:05 +000076sizeof(E)+
77sizeof(F)];