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