diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-07-17 00:55:19 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-07-17 00:55:19 +0000 |
commit | 1c5822aa6ad0c6849d102d815bb2200cbc3dcef3 (patch) | |
tree | a228be3386941279bd42b46b963dc44a7d38f2ab /test/Layout | |
parent | bf0b1aaf33a57a808c3a9b2838a372e9ba15b048 (diff) |
MS ABI: Padding injected between empty vbases doesn't up required align
Only alignment is changed, not required alignment.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@213217 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Layout')
-rw-r--r-- | test/Layout/ms-x86-pack-and-align.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/test/Layout/ms-x86-pack-and-align.cpp b/test/Layout/ms-x86-pack-and-align.cpp index 73984652ae..5e1aae1ca7 100644 --- a/test/Layout/ms-x86-pack-and-align.cpp +++ b/test/Layout/ms-x86-pack-and-align.cpp @@ -598,6 +598,62 @@ struct ND : NC {}; // CHECK-X64-NEXT: | [sizeof=12, align=4 // CHECK-X64-NEXT: | nvsize=8, nvalign=4] +struct OA {}; +struct OB {}; +struct OC : virtual OA, virtual OB {}; +#pragma pack(push, 1) +struct OD : OC {}; +#pragma pack(pop) + +// CHECK: *** Dumping AST Record Layout +// CHECK-NEXT: 0 | struct OA (empty) +// CHECK-NEXT: | [sizeof=1, align=1 +// CHECK-NEXT: | nvsize=0, nvalign=1] +// CHECK: *** Dumping AST Record Layout +// CHECK-NEXT: 0 | struct OB (empty) +// CHECK-NEXT: | [sizeof=1, align=1 +// CHECK-NEXT: | nvsize=0, nvalign=1] +// CHECK: *** Dumping AST Record Layout +// CHECK-NEXT: 0 | struct OC +// CHECK-NEXT: 0 | (OC vbtable pointer) +// CHECK-NEXT: 4 | struct OA (virtual base) (empty) +// CHECK-NEXT: 8 | struct OB (virtual base) (empty) +// CHECK-NEXT: | [sizeof=8, align=4 +// CHECK-NEXT: | nvsize=4, nvalign=4] +// CHECK: *** Dumping AST Record Layout +// CHECK-NEXT: 0 | struct OD +// CHECK-NEXT: 0 | struct OC (base) +// CHECK-NEXT: 0 | (OC vbtable pointer) +// CHECK-NEXT: 4 | struct OA (virtual base) (empty) +// CHECK-NEXT: 8 | struct OB (virtual base) (empty) +// CHECK-NEXT: | [sizeof=8, align=1 +// CHECK-NEXT: | nvsize=4, nvalign=1] +// CHECK-X64: *** Dumping AST Record Layout +// CHECK-X64-NEXT: 0 | struct OA (empty) +// CHECK-X64-NEXT: | [sizeof=1, align=1 +// CHECK-X64-NEXT: | nvsize=0, nvalign=1] +// CHECK-X64: *** Dumping AST Record Layout +// CHECK-X64-NEXT: 0 | struct OB (empty) +// CHECK-X64-NEXT: | [sizeof=1, align=1 +// CHECK-X64-NEXT: | nvsize=0, nvalign=1] +// CHECK-X64: *** Dumping AST Record Layout +// CHECK-X64-NEXT: 0 | struct OC +// CHECK-X64-NEXT: 0 | (OC vbtable pointer) +// CHECK-X64-NEXT: 8 | struct OA (virtual base) (empty) +// CHECK-X64-NEXT: 12 | struct OB (virtual base) (empty) +// CHECK-X64-NEXT: | [sizeof=16, align=8 +// CHECK-X64-NEXT: | nvsize=8, nvalign=8] +// CHECK-X64: *** Dumping AST Record Layout +// CHECK-X64-NEXT: 0 | struct OD +// CHECK-X64-NEXT: 0 | struct OC (base) +// CHECK-X64-NEXT: 0 | (OC vbtable pointer) +// CHECK-X64-NEXT: 8 | struct OA (virtual base) (empty) +// CHECK-X64-NEXT: 12 | struct OB (virtual base) (empty) +// CHECK-X64-NEXT: | [sizeof=12, align=1 +// CHECK-X64-NEXT: | nvsize=8, nvalign=1] + + + int a[ sizeof(X)+ sizeof(Y)+ @@ -623,4 +679,5 @@ sizeof(RB3)+ sizeof(RC)+ sizeof(RE)+ sizeof(ND)+ +sizeof(OD)+ 0]; |