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 | 0e70d916f2e2ebb7eb97ed7f606c52dcf59c9722 (patch) | |
tree | 7136ade53fb9525551e7fc6c1cc7cbba51ebfa58 /clang/test/Layout/ms-x86-alias-avoidance-padding.cpp | |
parent | 6e40cec5fd240082daefb3243c411d490f8e4027 (diff) | |
download | bcm5719-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.cpp | 31 |
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]; |