Index: cfe/trunk/lib/CodeGen/CGException.cpp =================================================================== --- cfe/trunk/lib/CodeGen/CGException.cpp +++ cfe/trunk/lib/CodeGen/CGException.cpp @@ -1325,21 +1325,20 @@ // 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); Index: cfe/trunk/test/CodeGenCXX/exceptions-cxx-new.cpp =================================================================== --- cfe/trunk/test/CodeGenCXX/exceptions-cxx-new.cpp +++ cfe/trunk/test/CodeGenCXX/exceptions-cxx-new.cpp @@ -72,5 +72,6 @@ // 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"() Index: cfe/trunk/test/CodeGenCXX/microsoft-abi-eh-terminate.cpp =================================================================== --- cfe/trunk/test/CodeGenCXX/microsoft-abi-eh-terminate.cpp +++ cfe/trunk/test/CodeGenCXX/microsoft-abi-eh-terminate.cpp @@ -9,6 +9,7 @@ // 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