blob: 89dd211a35159630c0fdce39d15a9359e6316f4e [file] [log] [blame]
Stephen Hines651f13c2014-04-23 16:59:28 -07001// RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fdump-record-layouts -fms-extensions -fsyntax-only %s 2>&1 | FileCheck %s
2
3struct __single_inheritance S;
4struct __multiple_inheritance M;
5struct __virtual_inheritance V;
6struct U;
7
8struct SD { char a; int S::*mp; };
9struct MD { char a; int M::*mp; };
10struct VD { char a; int V::*mp; };
11struct UD { char a; int U::*mp; };
12struct SF { char a; int (S::*mp)(); };
13struct MF { char a; int (M::*mp)(); };
14struct VF { char a; int (V::*mp)(); };
15struct UF { char a; int (U::*mp)(); };
16
17// CHECK: *** Dumping AST Record Layout
18// CHECK-NEXT: 0 | struct SD
19// CHECK-NEXT: 0 | char a
20// CHECK-NEXT: 4 | int struct S::* mp
21// CHECK-NEXT: | [sizeof=8, align=4
22// CHECK-NEXT: | nvsize=8, nvalign=4]
23
24// CHECK: *** Dumping AST Record Layout
25// CHECK-NEXT: 0 | struct MD
26// CHECK-NEXT: 0 | char a
27// CHECK-NEXT: 4 | int struct M::* mp
28// CHECK-NEXT: | [sizeof=8, align=4
29// CHECK-NEXT: | nvsize=8, nvalign=4]
30
31// CHECK: *** Dumping AST Record Layout
32// CHECK-NEXT: 0 | struct VD
33// CHECK-NEXT: 0 | char a
34// CHECK-NEXT: 8 | int struct V::* mp
35// CHECK-NEXT: | [sizeof=16, align=8
36// CHECK-NEXT: | nvsize=16, nvalign=8]
37
38// CHECK: *** Dumping AST Record Layout
39// CHECK-NEXT: 0 | struct UD
40// CHECK-NEXT: 0 | char a
41// CHECK-NEXT: 8 | int struct U::* mp
42// CHECK-NEXT: | [sizeof=24, align=8
43// CHECK-NEXT: | nvsize=24, nvalign=8]
44
45// CHECK: *** Dumping AST Record Layout
46// CHECK-NEXT: 0 | struct SF
47// CHECK-NEXT: 0 | char a
48// CHECK-NEXT: 4 | int (struct S::*)(void) __attribute__((thiscall)) mp
49// CHECK-NEXT: | [sizeof=8, align=4
50// CHECK-NEXT: | nvsize=8, nvalign=4]
51
52// CHECK: *** Dumping AST Record Layout
53// CHECK-NEXT: 0 | struct MF
54// CHECK-NEXT: 0 | char a
55// CHECK-NEXT: 8 | int (struct M::*)(void) __attribute__((thiscall)) mp
56// CHECK-NEXT: | [sizeof=16, align=8
57// CHECK-NEXT: | nvsize=16, nvalign=8]
58
59// CHECK: *** Dumping AST Record Layout
60// CHECK-NEXT: 0 | struct VF
61// CHECK-NEXT: 0 | char a
62// CHECK-NEXT: 8 | int (struct V::*)(void) __attribute__((thiscall)) mp
63// CHECK-NEXT: | [sizeof=24, align=8
64// CHECK-NEXT: | nvsize=24, nvalign=8]
65
66// CHECK: *** Dumping AST Record Layout
67// CHECK-NEXT: 0 | struct UF
68// CHECK-NEXT: 0 | char a
69// CHECK-NEXT: 8 | int (struct U::*)(void) __attribute__((thiscall)) mp
70// CHECK-NEXT: | [sizeof=24, align=8
71// CHECK-NEXT: | nvsize=24, nvalign=8]
72
73char a[sizeof(SD) +
74 sizeof(MD) +
75 sizeof(VD) +
76 sizeof(UD) +
77 sizeof(SF) +
78 sizeof(MF) +
79 sizeof(VF) +
80 sizeof(UF)];