diff options
author | David Majnemer <david.majnemer@gmail.com> | 2014-04-13 02:27:32 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2014-04-13 02:27:32 +0000 |
commit | ea88434120f609dc40f9890c938b0ff8095cf8ff (patch) | |
tree | f69499fd49d5cf26e770922054911de96bda0b63 /test/Layout | |
parent | 5f2aa8fbd9e0ac46fb7fa3650c0ccda6c9983504 (diff) |
MS ABI: #pragma vtordisp(0) only disables new vtordisps
Previously, it was believed that #pragma vtordisp(0) would prohibit the
generation of any and all vtordisps.
In actuality, it only disables the generation of additional vtordisps.
This fixes PR19413.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@206124 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Layout')
-rw-r--r-- | test/Layout/ms-x86-vtordisp.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/test/Layout/ms-x86-vtordisp.cpp b/test/Layout/ms-x86-vtordisp.cpp index 1619d1cb3b..fd34f7b2c2 100644 --- a/test/Layout/ms-x86-vtordisp.cpp +++ b/test/Layout/ms-x86-vtordisp.cpp @@ -381,6 +381,41 @@ struct GD: public virtual GC, public virtual GB {}; // CHECK-X64-NEXT: | [sizeof=40, align=8 // CHECK-X64-NEXT: | nvsize=8, nvalign=8] +struct HA { + virtual void fun() {} +}; +#pragma vtordisp(push, 2) +struct HB : virtual HA {}; +#pragma vtordisp(pop, 2) +#pragma vtordisp(push, 0) +struct HC : virtual HB {}; +#pragma vtordisp(pop, 0) + +// CHECK: *** Dumping AST Record Layout +// CHECK: *** Dumping AST Record Layout +// CHECK: *** Dumping AST Record Layout +// CHECK-NEXT: 0 | struct HC +// CHECK-NEXT: 0 | (HC vbtable pointer) +// CHECK-NEXT: 4 | (vtordisp for vbase HA) +// CHECK-NEXT: 8 | struct HA (virtual base) +// CHECK-NEXT: 8 | (HA vftable pointer) +// CHECK-NEXT: 12 | struct HB (virtual base) +// CHECK-NEXT: 12 | (HB vbtable pointer) +// CHECK-NEXT: | [sizeof=16, 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-NEXT: 0 | struct HC +// CHECK-X64-NEXT: 0 | (HC vbtable pointer) +// CHECK-X64-NEXT: 12 | (vtordisp for vbase HA) +// CHECK-X64-NEXT: 16 | struct HA (virtual base) +// CHECK-X64-NEXT: 16 | (HA vftable pointer) +// CHECK-X64-NEXT: 24 | struct HB (virtual base) +// CHECK-X64-NEXT: 24 | (HB vbtable pointer) +// CHECK-X64-NEXT: | [sizeof=32, align=8 +// CHECK-X64-NEXT: | nvsize=8, nvalign=8] + int a[ sizeof(A)+ sizeof(C)+ @@ -392,4 +427,5 @@ sizeof(pragma_test2::C)+ sizeof(pragma_test3::C)+ sizeof(pragma_test4::C)+ sizeof(GD)+ +sizeof(HC)+ 0]; |