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