ms-x86-empty-layout.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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-NEXT: 0 | struct EmptyIntMemb
  10. // CHECK-NEXT: 0 | int [0] FlexArrayMemb
  11. // CHECK-NEXT: | [sizeof=4, align=4
  12. struct EmptyLongLongMemb {
  13. long long FlexArrayMemb[0];
  14. };
  15. // CHECK: *** Dumping AST Record Layout
  16. // CHECK-NEXT: 0 | struct EmptyLongLongMemb
  17. // CHECK-NEXT: 0 | long long [0] FlexArrayMemb
  18. // CHECK-NEXT: | [sizeof=4, align=8
  19. struct EmptyAligned2LongLongMemb {
  20. long long __declspec(align(2)) FlexArrayMemb[0];
  21. };
  22. // CHECK: *** Dumping AST Record Layout
  23. // CHECK-NEXT: 0 | struct EmptyAligned2LongLongMemb
  24. // CHECK-NEXT: 0 | long long [0] FlexArrayMemb
  25. // CHECK-NEXT: | [sizeof=4, align=8
  26. struct EmptyAligned8LongLongMemb {
  27. long long __declspec(align(8)) FlexArrayMemb[0];
  28. };
  29. // CHECK: *** Dumping AST Record Layout
  30. // CHECK-NEXT: 0 | struct EmptyAligned8LongLongMemb
  31. // CHECK-NEXT: 0 | long long [0] FlexArrayMemb
  32. // CHECK-NEXT: | [sizeof=8, align=8
  33. #pragma pack(1)
  34. struct __declspec(align(4)) EmptyPackedAligned4LongLongMemb {
  35. long long FlexArrayMemb[0];
  36. };
  37. #pragma pack()
  38. // CHECK: *** Dumping AST Record Layout
  39. // CHECK-NEXT: 0 | struct EmptyPackedAligned4LongLongMemb
  40. // CHECK-NEXT: 0 | long long [0] FlexArrayMemb
  41. // CHECK-NEXT: | [sizeof=4, align=4
  42. #pragma pack(1)
  43. struct EmptyPackedAligned8LongLongMemb {
  44. long long __declspec(align(8)) FlexArrayMemb[0];
  45. };
  46. #pragma pack()
  47. // CHECK: *** Dumping AST Record Layout
  48. // CHECK-NEXT: 0 | struct EmptyPackedAligned8LongLongMemb
  49. // CHECK-NEXT: 0 | long long [0] FlexArrayMemb
  50. // CHECK-NEXT: | [sizeof=8, align=8
  51. int a[
  52. sizeof(struct EmptyIntMemb)+
  53. sizeof(struct EmptyLongLongMemb)+
  54. sizeof(struct EmptyAligned2LongLongMemb)+
  55. sizeof(struct EmptyAligned8LongLongMemb)+
  56. sizeof(struct EmptyPackedAligned4LongLongMemb)+
  57. sizeof(struct EmptyPackedAligned8LongLongMemb)+
  58. 0];