summaryrefslogtreecommitdiffstats
path: root/clang/test/Layout/ms-x86-alias-avoidance-padding.cpp
diff options
context:
space:
mode:
authorWarren Hunt <whunt@google.com>2014-04-11 23:33:35 +0000
committerWarren Hunt <whunt@google.com>2014-04-11 23:33:35 +0000
commit0e70d916f2e2ebb7eb97ed7f606c52dcf59c9722 (patch)
tree7136ade53fb9525551e7fc6c1cc7cbba51ebfa58 /clang/test/Layout/ms-x86-alias-avoidance-padding.cpp
parent6e40cec5fd240082daefb3243c411d490f8e4027 (diff)
downloadbcm5719-llvm-0e70d916f2e2ebb7eb97ed7f606c52dcf59c9722.tar.gz
bcm5719-llvm-0e70d916f2e2ebb7eb97ed7f606c52dcf59c9722.zip
[MS-ABI] Fixed alias-avoidance padding in the presence of vtordisps
If a vtordisp exists between two bases, then there is no need for additional alias avoidance padding. Test case included. llvm-svn: 206087
Diffstat (limited to 'clang/test/Layout/ms-x86-alias-avoidance-padding.cpp')
-rw-r--r--clang/test/Layout/ms-x86-alias-avoidance-padding.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/clang/test/Layout/ms-x86-alias-avoidance-padding.cpp b/clang/test/Layout/ms-x86-alias-avoidance-padding.cpp
index 7a78f8732ca..e51bab38711 100644
--- a/clang/test/Layout/ms-x86-alias-avoidance-padding.cpp
+++ b/clang/test/Layout/ms-x86-alias-avoidance-padding.cpp
@@ -547,7 +547,37 @@ struct RZ8 : RX8, RY {};
// CHECK-X64-NEXT: | [sizeof=16, align=8
// CHECK-X64-NEXT: | nvsize=8, nvalign=8]
+struct JA {};
+struct JB {};
+struct JC : JA { virtual void f() {} };
+struct JD : virtual JB, virtual JC { virtual void f() {} JD() {} };
+// CHECK: *** Dumping AST Record Layout
+// CHECK: *** Dumping AST Record Layout
+// CHECK: *** Dumping AST Record Layout
+// CHECK: *** Dumping AST Record Layout
+// CHECK-NEXT: 0 | struct JD
+// CHECK-NEXT: 0 | (JD vbtable pointer)
+// CHECK-NEXT: 4 | struct JB (virtual base) (empty)
+// CHECK-NEXT: 4 | (vtordisp for vbase JC)
+// CHECK-NEXT: 8 | struct JC (virtual base)
+// CHECK-NEXT: 8 | (JC vftable pointer)
+// CHECK-NEXT: 12 | struct JA (base) (empty)
+// CHECK-NEXT: | [sizeof=12, align=4
+// CHECK-NEXT: | nvsize=4, 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 JD
+// CHECK-X64-NEXT: 0 | (JD vbtable pointer)
+// CHECK-X64-NEXT: 8 | struct JB (virtual base) (empty)
+// CHECK-X64-NEXT: 12 | (vtordisp for vbase JC)
+// CHECK-X64-NEXT: 16 | struct JC (virtual base)
+// CHECK-X64-NEXT: 16 | (JC vftable pointer)
+// CHECK-X64-NEXT: 24 | struct JA (base) (empty)
+// CHECK-X64-NEXT: | [sizeof=24, align=8
+// CHECK-X64-NEXT: | nvsize=8, nvalign=8]
int a[
sizeof(AT3) +
@@ -565,4 +595,5 @@ sizeof(RZ5) +
sizeof(RZ6) +
sizeof(RZ7) +
sizeof(RZ8) +
+sizeof(JD) +
0];
OpenPOWER on IntegriCloud