diff options
| author | Reid Kleckner <rnk@google.com> | 2018-03-16 19:40:50 +0000 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2018-03-16 19:40:50 +0000 |
| commit | ae9b07011140037c364e5efa2bb3ff422163d5b5 (patch) | |
| tree | 3388ccca7a0b75251bffb10bdd35ed71bdac9575 /clang/test/CodeGenCoroutines | |
| parent | 5ba2fe3720c51c1ea5740c32c525d48a64105626 (diff) | |
| download | bcm5719-llvm-ae9b07011140037c364e5efa2bb3ff422163d5b5.tar.gz bcm5719-llvm-ae9b07011140037c364e5efa2bb3ff422163d5b5.zip | |
[MS] Always use base dtors in place of complete/vbase dtors when possible
Summary:
Previously we tried too hard to uphold the fiction that destructor
variants work like they do on Itanium throughout the ABI-neutral parts
of clang. This lead to MS C++ ABI incompatiblities and other bugs. Now,
-mconstructor-aliases will no longer control this ABI detail, and clang
-cc1's LLVM IR output will be this much closer to the clang driver's.
Based on a patch by Zahira Ammarguellat:
https://reviews.llvm.org/D39063
I've tried to move the logic that Zahira added into MicrosoftCXXABI.cpp.
There is only one ABI-specific detail sticking out, and that is in
CodeGenModule::getAddrOfCXXStructor, where we collapse complete dtors to
base dtors in the MS ABI.
This fixes PR32990.
Reviewers: erichkeane, zahiraam, majnemer, rjmccall
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D44505
llvm-svn: 327732
Diffstat (limited to 'clang/test/CodeGenCoroutines')
| -rw-r--r-- | clang/test/CodeGenCoroutines/coro-eh-cleanup.cpp | 2 | ||||
| -rw-r--r-- | clang/test/CodeGenCoroutines/coro-promise-dtor.cpp | 2 | ||||
| -rw-r--r-- | clang/test/CodeGenCoroutines/coro-unhandled-exception.cpp | 2 |
3 files changed, 3 insertions, 3 deletions
diff --git a/clang/test/CodeGenCoroutines/coro-eh-cleanup.cpp b/clang/test/CodeGenCoroutines/coro-eh-cleanup.cpp index 5a3ecd1da49..1f21c69e0e0 100644 --- a/clang/test/CodeGenCoroutines/coro-eh-cleanup.cpp +++ b/clang/test/CodeGenCoroutines/coro-eh-cleanup.cpp @@ -50,7 +50,7 @@ coro_t f() { // CHECK: to label %[[CONT:.+]] unwind label %[[EHCLEANUP:.+]] // CHECK: [[EHCLEANUP]]: // CHECK: %[[INNERPAD:.+]] = cleanuppad within none [] -// CHECK: call void @"\01??_DCleanup@@QEAAXXZ"( +// CHECK: call void @"\01??1Cleanup@@QEAA@XZ"( // CHECK: cleanupret from %{{.+}} unwind label %[[CATCHDISPATCH:.+]] // CHECK: [[CATCHDISPATCH]]: diff --git a/clang/test/CodeGenCoroutines/coro-promise-dtor.cpp b/clang/test/CodeGenCoroutines/coro-promise-dtor.cpp index 5cc472054a5..53e07eeb2a1 100644 --- a/clang/test/CodeGenCoroutines/coro-promise-dtor.cpp +++ b/clang/test/CodeGenCoroutines/coro-promise-dtor.cpp @@ -44,4 +44,4 @@ coro_t f() { // CHECK: br i1 %[[NRVO]], label %{{.+}}, label %[[DTOR:.+]] // CHECK: [[DTOR]]: -// CHECK: call void @"\01??_Dcoro_t@@QEAAXXZ"( +// CHECK: call void @"\01??1coro_t@@QEAA@XZ"( diff --git a/clang/test/CodeGenCoroutines/coro-unhandled-exception.cpp b/clang/test/CodeGenCoroutines/coro-unhandled-exception.cpp index e26a51861d9..e0fef07545a 100644 --- a/clang/test/CodeGenCoroutines/coro-unhandled-exception.cpp +++ b/clang/test/CodeGenCoroutines/coro-unhandled-exception.cpp @@ -37,7 +37,7 @@ coro_t f() { // CHECK: to label %{{.+}} unwind label %[[EHCLEANUP:.+]] // CHECK: [[EHCLEANUP]]: // CHECK: %[[INNERPAD:.+]] = cleanuppad within none [] -// CHECK: call void @"\01??_DCleanup@@QEAAXXZ"( +// CHECK: call void @"\01??1Cleanup@@QEAA@XZ"( // CHECK: cleanupret from %[[INNERPAD]] unwind label %[[CATCHSW:.+]] // CHECK: [[CATCHSW]]: // CHECK: %[[CATCHSWTOK:.+]] = catchswitch within none [label %[[CATCH:.+]]] unwind label |

