ms-x86-empty-layout.c 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. // RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple i686-pc-win32 -fms-extensions -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
  2. // RUN: | FileCheck %s
  3. // RUN: %clang_cc1 -fno-rtti -emit-llvm-only -triple x86_64-pc-win32 -fms-extensions -fdump-record-layouts -fsyntax-only %s 2>/dev/null \
  4. // RUN: | FileCheck %s
  5. struct EmptyIntMemb {
  6. int FlexArrayMemb[0];
  7. };
  8. // CHECK: *** Dumping AST Record Layout
  9. // CHECK: Type: struct EmptyIntMemb
  10. // CHECK: Record:
  11. // CHECK: Layout: <ASTRecordLayout
  12. // CHECK: Size:32
  13. // CHECK: Alignment:32
  14. // CHECK: FieldOffsets: [0]>
  15. struct EmptyLongLongMemb {
  16. long long FlexArrayMemb[0];
  17. };
  18. // CHECK: *** Dumping AST Record Layout
  19. // CHECK: Type: struct EmptyLongLongMemb
  20. // CHECK: Record:
  21. // CHECK: Layout: <ASTRecordLayout
  22. // CHECK: Size:32
  23. // CHECK: Alignment:64
  24. // CHECK: FieldOffsets: [0]>
  25. struct EmptyAligned2LongLongMemb {
  26. long long __declspec(align(2)) FlexArrayMemb[0];
  27. };
  28. // CHECK: *** Dumping AST Record Layout
  29. // CHECK: Type: struct EmptyAligned2LongLongMemb
  30. // CHECK: Record:
  31. // CHECK: Layout: <ASTRecordLayout
  32. // CHECK: Size:32
  33. // CHECK: Alignment:64
  34. // CHECK: FieldOffsets: [0]>
  35. struct EmptyAligned8LongLongMemb {
  36. long long __declspec(align(8)) FlexArrayMemb[0];
  37. };
  38. // CHECK: *** Dumping AST Record Layout
  39. // CHECK: Type: struct EmptyAligned8LongLongMemb
  40. // CHECK: Record:
  41. // CHECK: Layout: <ASTRecordLayout
  42. // CHECK: Size:64
  43. // CHECK: Alignment:64
  44. // CHECK: FieldOffsets: [0]>
  45. #pragma pack(1)
  46. struct __declspec(align(4)) EmptyPackedAligned4LongLongMemb {
  47. long long FlexArrayMemb[0];
  48. };
  49. #pragma pack()
  50. // CHECK: *** Dumping AST Record Layout
  51. // CHECK: Type: struct EmptyPackedAligned4LongLongMemb
  52. // CHECK: Record:
  53. // CHECK: Layout: <ASTRecordLayout
  54. // CHECK: Size:32
  55. // CHECK: Alignment:32
  56. // CHECK: FieldOffsets: [0]>
  57. #pragma pack(1)
  58. struct EmptyPackedAligned8LongLongMemb {
  59. long long __declspec(align(8)) FlexArrayMemb[0];
  60. };
  61. #pragma pack()
  62. // CHECK: *** Dumping AST Record Layout
  63. // CHECK: Type: struct EmptyPackedAligned8LongLongMemb
  64. // CHECK: Record:
  65. // CHECK: Layout: <ASTRecordLayout
  66. // CHECK: Size:64
  67. // CHECK: Alignment:64
  68. // CHECK: FieldOffsets: [0]>
  69. int a[
  70. sizeof(struct EmptyIntMemb)+
  71. sizeof(struct EmptyLongLongMemb)+
  72. sizeof(struct EmptyAligned2LongLongMemb)+
  73. sizeof(struct EmptyAligned8LongLongMemb)+
  74. sizeof(struct EmptyPackedAligned4LongLongMemb)+
  75. sizeof(struct EmptyPackedAligned8LongLongMemb)+
  76. 0];