xref: /aosp_15_r20/external/clang/test/Layout/ms-x86-member-pointers.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // 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*67e74705SXin Li 
3*67e74705SXin Li struct __single_inheritance S;
4*67e74705SXin Li struct __multiple_inheritance M;
5*67e74705SXin Li struct __virtual_inheritance V;
6*67e74705SXin Li struct U;
7*67e74705SXin Li 
8*67e74705SXin Li struct SD { char a; int S::*mp; };
9*67e74705SXin Li struct MD { char a; int M::*mp; };
10*67e74705SXin Li struct VD { char a; int V::*mp; };
11*67e74705SXin Li struct UD { char a; int U::*mp; };
12*67e74705SXin Li struct SF { char a; int (S::*mp)(); };
13*67e74705SXin Li struct MF { char a; int (M::*mp)(); };
14*67e74705SXin Li struct VF { char a; int (V::*mp)(); };
15*67e74705SXin Li struct UF { char a; int (U::*mp)(); };
16*67e74705SXin Li 
17*67e74705SXin Li // CHECK: *** Dumping AST Record Layout
18*67e74705SXin Li // CHECK-NEXT:    0 | struct SD
19*67e74705SXin Li // CHECK-NEXT:    0 |   char a
20*67e74705SXin Li // CHECK-NEXT:    4 |   int struct S::* mp
21*67e74705SXin Li // CHECK-NEXT:      | [sizeof=8, align=4
22*67e74705SXin Li // CHECK-NEXT:      |  nvsize=8, nvalign=4]
23*67e74705SXin Li 
24*67e74705SXin Li // CHECK: *** Dumping AST Record Layout
25*67e74705SXin Li // CHECK-NEXT:    0 | struct MD
26*67e74705SXin Li // CHECK-NEXT:    0 |   char a
27*67e74705SXin Li // CHECK-NEXT:    4 |   int struct M::* mp
28*67e74705SXin Li // CHECK-NEXT:      | [sizeof=8, align=4
29*67e74705SXin Li // CHECK-NEXT:      |  nvsize=8, nvalign=4]
30*67e74705SXin Li 
31*67e74705SXin Li // CHECK: *** Dumping AST Record Layout
32*67e74705SXin Li // CHECK-NEXT:    0 | struct VD
33*67e74705SXin Li // CHECK-NEXT:    0 |   char a
34*67e74705SXin Li // CHECK-NEXT:    8 |   int struct V::* mp
35*67e74705SXin Li // CHECK-NEXT:      | [sizeof=16, align=8
36*67e74705SXin Li // CHECK-NEXT:      |  nvsize=16, nvalign=8]
37*67e74705SXin Li 
38*67e74705SXin Li // CHECK: *** Dumping AST Record Layout
39*67e74705SXin Li // CHECK-NEXT:    0 | struct UD
40*67e74705SXin Li // CHECK-NEXT:    0 |   char a
41*67e74705SXin Li // CHECK-NEXT:    8 |   int struct U::* mp
42*67e74705SXin Li // CHECK-NEXT:      | [sizeof=24, align=8
43*67e74705SXin Li // CHECK-NEXT:      |  nvsize=24, nvalign=8]
44*67e74705SXin Li 
45*67e74705SXin Li // CHECK: *** Dumping AST Record Layout
46*67e74705SXin Li // CHECK-NEXT:    0 | struct SF
47*67e74705SXin Li // CHECK-NEXT:    0 |   char a
48*67e74705SXin Li // CHECK-NEXT:    4 |   int (struct S::*)(void) __attribute__((thiscall)) mp
49*67e74705SXin Li // CHECK-NEXT:      | [sizeof=8, align=4
50*67e74705SXin Li // CHECK-NEXT:      |  nvsize=8, nvalign=4]
51*67e74705SXin Li 
52*67e74705SXin Li // CHECK: *** Dumping AST Record Layout
53*67e74705SXin Li // CHECK-NEXT:    0 | struct MF
54*67e74705SXin Li // CHECK-NEXT:    0 |   char a
55*67e74705SXin Li // CHECK-NEXT:    8 |   int (struct M::*)(void) __attribute__((thiscall)) mp
56*67e74705SXin Li // CHECK-NEXT:      | [sizeof=16, align=8
57*67e74705SXin Li // CHECK-NEXT:      |  nvsize=16, nvalign=8]
58*67e74705SXin Li 
59*67e74705SXin Li // CHECK: *** Dumping AST Record Layout
60*67e74705SXin Li // CHECK-NEXT:    0 | struct VF
61*67e74705SXin Li // CHECK-NEXT:    0 |   char a
62*67e74705SXin Li // CHECK-NEXT:    8 |   int (struct V::*)(void) __attribute__((thiscall)) mp
63*67e74705SXin Li // CHECK-NEXT:      | [sizeof=24, align=8
64*67e74705SXin Li // CHECK-NEXT:      |  nvsize=24, nvalign=8]
65*67e74705SXin Li 
66*67e74705SXin Li // CHECK: *** Dumping AST Record Layout
67*67e74705SXin Li // CHECK-NEXT:    0 | struct UF
68*67e74705SXin Li // CHECK-NEXT:    0 |   char a
69*67e74705SXin Li // CHECK-NEXT:    8 |   int (struct U::*)(void) __attribute__((thiscall)) mp
70*67e74705SXin Li // CHECK-NEXT:      | [sizeof=24, align=8
71*67e74705SXin Li // CHECK-NEXT:      |  nvsize=24, nvalign=8]
72*67e74705SXin Li 
73*67e74705SXin Li char a[sizeof(SD) +
74*67e74705SXin Li        sizeof(MD) +
75*67e74705SXin Li        sizeof(VD) +
76*67e74705SXin Li        sizeof(UD) +
77*67e74705SXin Li        sizeof(SF) +
78*67e74705SXin Li        sizeof(MF) +
79*67e74705SXin Li        sizeof(VF) +
80*67e74705SXin Li        sizeof(UF)];
81