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 | f6ec74826e492f31a2e92e5ecbc80ac94d1a3c4b (patch) | |
tree | bd7e966e13f5ae27895470ac6c92d432bdbb5cf2 /clang/test/Layout/ms-x86-empty-virtual-base.cpp | |
parent | 90331d5cf4d1bc81d2275ae9bcf2f03127e912a0 (diff) | |
download | bcm5719-llvm-f6ec74826e492f31a2e92e5ecbc80ac94d1a3c4b.tar.gz bcm5719-llvm-f6ec74826e492f31a2e92e5ecbc80ac94d1a3c4b.zip |
[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.
llvm-svn: 201832
Diffstat (limited to 'clang/test/Layout/ms-x86-empty-virtual-base.cpp')
-rw-r--r-- | clang/test/Layout/ms-x86-empty-virtual-base.cpp | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/clang/test/Layout/ms-x86-empty-virtual-base.cpp b/clang/test/Layout/ms-x86-empty-virtual-base.cpp index 819246ee2ae..267f82afef7 100644 --- a/clang/test/Layout/ms-x86-empty-virtual-base.cpp +++ b/clang/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)]; |