diff options
author | Warren Hunt <whunt@google.com> | 2014-04-11 23:33:35 +0000 |
---|---|---|
committer | Warren Hunt <whunt@google.com> | 2014-04-11 23:33:35 +0000 |
commit | 23ebdf2beabb80b9a39f1295b843fe6dcbdb0af1 (patch) | |
tree | 3297b58f6fb0b59fd00db6d264b65637a06b9a9e /test/Layout | |
parent | 85ac3c716b1cadd7147b8545b0393263d2e8bbf6 (diff) | |
download | clang-23ebdf2beabb80b9a39f1295b843fe6dcbdb0af1.tar.gz |
[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.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@206087 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Layout')
-rw-r--r-- | test/Layout/ms-x86-alias-avoidance-padding.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/test/Layout/ms-x86-alias-avoidance-padding.cpp b/test/Layout/ms-x86-alias-avoidance-padding.cpp index 7a78f8732c..e51bab3871 100644 --- a/test/Layout/ms-x86-alias-avoidance-padding.cpp +++ b/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]; |