diff options
author | Warren Hunt <whunt@google.com> | 2014-02-21 01:40:35 +0000 |
---|---|---|
committer | Warren Hunt <whunt@google.com> | 2014-02-21 01:40:35 +0000 |
commit | e62fd7d3d76c9075bf2d5b8d8bf961e7ae52dc8f (patch) | |
tree | d3dcff128702fb90c3e286bed2d8981cd80831ed /test/Layout | |
parent | f234364a86161ed5c9d91dab2ef7e39a81ea669e (diff) |
[MS-ABI] Update to zero-sized padding algorithm
Slight change to the way zero-sized sub-objects are tracked in the
presence of virtual bases.
In addition we correctly distinguish between dsize and nvsize.
addresses http://llvm.org/bugs/show_bug.cgi?id=18826
Unit tests are included.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201832 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Layout')
-rw-r--r-- | test/Layout/ms-x86-empty-virtual-base.cpp | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/test/Layout/ms-x86-empty-virtual-base.cpp b/test/Layout/ms-x86-empty-virtual-base.cpp index 819246ee2a..267f82afef 100644 --- a/test/Layout/ms-x86-empty-virtual-base.cpp +++ b/test/Layout/ms-x86-empty-virtual-base.cpp @@ -730,6 +730,40 @@ struct T3 : virtual T1, virtual T0 { long long a; }; // CHECK-X64-NEXT: | [sizeof=24, align=8 // CHECK-X64-NEXT: | nvsize=16, nvalign=8] +struct Q0A {}; +struct Q0B { char Q0BField; }; +struct Q0C : virtual Q0A, virtual Q0B { char Q0CField; }; +struct Q0D : Q0C, Q0A {}; + +// CHECK: *** Dumping AST Record Layout +// CHECK: *** Dumping AST Record Layout +// CHECK: *** Dumping AST Record Layout +// CHECK: *** Dumping AST Record Layout +// CHECK-NEXT: 0 | struct Q0D +// CHECK-NEXT: 0 | struct Q0C (base) +// CHECK-NEXT: 0 | (Q0C vbtable pointer) +// CHECK-NEXT: 4 | char Q0CField +// CHECK-NEXT: 8 | struct Q0A (base) (empty) +// CHECK-NEXT: 8 | struct Q0A (virtual base) (empty) +// CHECK-NEXT: 8 | struct Q0B (virtual base) +// CHECK-NEXT: 8 | char Q0BField +// CHECK-NEXT: | [sizeof=9, align=4 +// CHECK-NEXT: | nvsize=8, nvalign=4] +// CHECK-X64: *** Dumping AST Record Layout +// CHECK-X64: *** Dumping AST Record Layout +// CHECK-X64: *** Dumping AST Record Layout +// CHECK-X64: *** Dumping AST Record Layout +// CHECK-X64-NEXT: 0 | struct Q0D +// CHECK-X64-NEXT: 0 | struct Q0C (base) +// CHECK-X64-NEXT: 0 | (Q0C vbtable pointer) +// CHECK-X64-NEXT: 8 | char Q0CField +// CHECK-X64-NEXT: 16 | struct Q0A (base) (empty) +// CHECK-X64-NEXT: 16 | struct Q0A (virtual base) (empty) +// CHECK-X64-NEXT: 16 | struct Q0B (virtual base) +// CHECK-X64-NEXT: 16 | char Q0BField +// CHECK-X64-NEXT: | [sizeof=24, align=8 +// CHECK-X64-NEXT: | nvsize=16, nvalign=8] + int a[ sizeof(A)+ sizeof(B)+ @@ -753,4 +787,5 @@ sizeof(S)+ sizeof(T)+ sizeof(U)+ sizeof(V)+ -sizeof(T3)]; +sizeof(T3)+ +sizeof(Q0D)]; |