diff options
-rw-r--r-- | clang/lib/CodeGen/CGException.cpp | 13 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/exceptions-cxx-new.cpp | 3 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/microsoft-abi-eh-terminate.cpp | 5 |
3 files changed, 11 insertions, 10 deletions
diff --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp index b5e1dcdc6c9..a064e6246a7 100644 --- a/clang/lib/CodeGen/CGException.cpp +++ b/clang/lib/CodeGen/CGException.cpp @@ -1325,21 +1325,20 @@ llvm::BasicBlock *CodeGenFunction::getTerminateHandler() { // end of the function by FinishFunction. TerminateHandler = createBasicBlock("terminate.handler"); Builder.SetInsertPoint(TerminateHandler); + llvm::Value *Exn = nullptr; if (EHPersonality::get(*this).usesFuncletPads()) { llvm::Value *ParentPad = CurrentFuncletPad; if (!ParentPad) ParentPad = llvm::ConstantTokenNone::get(CGM.getLLVMContext()); - Builder.CreateTerminatePad(ParentPad, /*UnwindBB=*/nullptr, - {CGM.getTerminateFn()}); + Builder.CreateCleanupPad(ParentPad); } else { - llvm::Value *Exn = nullptr; if (getLangOpts().CPlusPlus) Exn = getExceptionFromSlot(); - llvm::CallInst *terminateCall = - CGM.getCXXABI().emitTerminateForUnexpectedException(*this, Exn); - terminateCall->setDoesNotReturn(); - Builder.CreateUnreachable(); } + llvm::CallInst *terminateCall = + CGM.getCXXABI().emitTerminateForUnexpectedException(*this, Exn); + terminateCall->setDoesNotReturn(); + Builder.CreateUnreachable(); // Restore the saved insertion state. Builder.restoreIP(SavedIP); diff --git a/clang/test/CodeGenCXX/exceptions-cxx-new.cpp b/clang/test/CodeGenCXX/exceptions-cxx-new.cpp index 42b26c9dc8f..3767f3321c3 100644 --- a/clang/test/CodeGenCXX/exceptions-cxx-new.cpp +++ b/clang/test/CodeGenCXX/exceptions-cxx-new.cpp @@ -72,5 +72,6 @@ void test_cleanup() { // CHECK: ret void // CHECK: [[TERMINATE]] -// CHECK: terminatepad within none [void ()* @"\01?terminate@@YAXXZ"] unwind to caller +// CHECK: cleanuppad within none [] +// CHECK-NEXT: call void @"\01?terminate@@YAXXZ"() diff --git a/clang/test/CodeGenCXX/microsoft-abi-eh-terminate.cpp b/clang/test/CodeGenCXX/microsoft-abi-eh-terminate.cpp index 7eb9f08524e..0b8d270e137 100644 --- a/clang/test/CodeGenCXX/microsoft-abi-eh-terminate.cpp +++ b/clang/test/CodeGenCXX/microsoft-abi-eh-terminate.cpp @@ -9,6 +9,7 @@ void never_throws() noexcept(true) { // CHECK-LABEL: define void @"\01?never_throws@@YAXXZ"() // CHECK-SAME: personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) // CHECK: invoke void @"\01?may_throw@@YAXXZ"() -// MSVC2013: terminatepad within none [void ()* @"\01?terminate@@YAXXZ"] -// MSVC2015: terminatepad within none [void ()* @__std_terminate] +// CHECK: cleanuppad within none [] +// MSVC2013: call void @"\01?terminate@@YAXXZ"() +// MSVC2015: call void @__std_terminate() // CHECK-NEXT: unreachable |