summaryrefslogtreecommitdiff
path: root/test/Layout
diff options
context:
space:
mode:
authorWarren Hunt <whunt@google.com>2014-02-21 01:40:35 +0000
committerWarren Hunt <whunt@google.com>2014-02-21 01:40:35 +0000
commite62fd7d3d76c9075bf2d5b8d8bf961e7ae52dc8f (patch)
treed3dcff128702fb90c3e286bed2d8981cd80831ed /test/Layout
parentf234364a86161ed5c9d91dab2ef7e39a81ea669e (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.cpp37
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)];