diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2017-02-14 00:54:11 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2017-02-14 00:54:11 +0000 |
| commit | dc169759ca2a72d6fe9eff0b9320ad4296e3791a (patch) | |
| tree | 3a9f780d3c0d21e76f12eca8b70d027ce9c1b2ae /clang/test/CodeGenCXX/microsoft-abi-structors.cpp | |
| parent | d96089b2487448af11ecdaba8371f08d9b2381a2 (diff) | |
| download | bcm5719-llvm-dc169759ca2a72d6fe9eff0b9320ad4296e3791a.tar.gz bcm5719-llvm-dc169759ca2a72d6fe9eff0b9320ad4296e3791a.zip | |
[MS ABI] Correctly mangling vbase destructors
They are a little bit of a special case in the mangling. They are always
mangled without taking into account their virtual-ness of the
destructor. They are also mangled to return void, unlike the actual
destructor.
This fixes PR31931.
Differential Revision: https://reviews.llvm.org/D29912
llvm-svn: 295010
Diffstat (limited to 'clang/test/CodeGenCXX/microsoft-abi-structors.cpp')
| -rw-r--r-- | clang/test/CodeGenCXX/microsoft-abi-structors.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/clang/test/CodeGenCXX/microsoft-abi-structors.cpp b/clang/test/CodeGenCXX/microsoft-abi-structors.cpp index 6397eeb7313..4de6c334661 100644 --- a/clang/test/CodeGenCXX/microsoft-abi-structors.cpp +++ b/clang/test/CodeGenCXX/microsoft-abi-structors.cpp @@ -207,7 +207,7 @@ F::~F() { void foo() { F f; } -// DTORS3-LABEL: define linkonce_odr x86_thiscallcc void @"\01??_DF@test2@@UAE@XZ"({{.*}} {{.*}} comdat +// DTORS3-LABEL: define linkonce_odr x86_thiscallcc void @"\01??_DF@test2@@QAEXXZ"({{.*}} {{.*}} comdat // Do an adjustment from C* to F*. // DTORS3: getelementptr i8, i8* %{{.*}}, i32 20 // DTORS3: bitcast i8* %{{.*}} to %"struct.test2::F"* @@ -361,12 +361,12 @@ struct D : B, C { ~D(); }; void call_vbase_complete(D *d) { d->~D(); // CHECK: define void @"\01?call_vbase_complete@dtors@@YAXPAUD@1@@Z" -// CHECK: call x86_thiscallcc void @"\01??_DD@dtors@@QAE@XZ"(%"struct.dtors::D"* %{{[^,]+}}) +// CHECK: call x86_thiscallcc void @"\01??_DD@dtors@@QAEXXZ"(%"struct.dtors::D"* %{{[^,]+}}) // CHECK: ret } // The complete dtor should call the base dtors for D and the vbase A (once). -// CHECK: define linkonce_odr x86_thiscallcc void @"\01??_DD@dtors@@QAE@XZ"({{.*}}) {{.*}} comdat +// CHECK: define linkonce_odr x86_thiscallcc void @"\01??_DD@dtors@@QAEXXZ"({{.*}}) {{.*}} comdat // CHECK-NOT: call // CHECK: call x86_thiscallcc void @"\01??1D@dtors@@QAE@XZ" // CHECK-NOT: call @@ -377,7 +377,7 @@ void call_vbase_complete(D *d) { void destroy_d_complete() { D d; // CHECK: define void @"\01?destroy_d_complete@dtors@@YAXXZ" -// CHECK: call x86_thiscallcc void @"\01??_DD@dtors@@QAE@XZ"(%"struct.dtors::D"* %{{[^,]+}}) +// CHECK: call x86_thiscallcc void @"\01??_DD@dtors@@QAEXXZ"(%"struct.dtors::D"* %{{[^,]+}}) // CHECK: ret } @@ -387,7 +387,7 @@ void destroy_d_complete() { void call_nv_deleting_dtor(D *d) { delete d; // CHECK: define void @"\01?call_nv_deleting_dtor@dtors@@YAXPAUD@1@@Z" -// CHECK: call x86_thiscallcc void @"\01??_DD@dtors@@QAE@XZ"(%"struct.dtors::D"* %{{[^,]+}}) +// CHECK: call x86_thiscallcc void @"\01??_DD@dtors@@QAEXXZ"(%"struct.dtors::D"* %{{[^,]+}}) // CHECK: call void @"\01??3@YAXPAX@Z" // CHECK: ret } |

