ms-x86-member-pointers.cpp 2.6 KB

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