From: Joseph Tremoulet Date: Sun, 23 Aug 2015 00:26:48 +0000 (+0000) Subject: [WinEH] Update to new EH pad/ret signatures (with tokens required) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2b06a033d151865ca944dedf899e9b36aa630f42;p=clang [WinEH] Update to new EH pad/ret signatures (with tokens required) Summary: The signatures of the methods in LLVM for creating EH pads/rets are changing to require token arguments on rets and assume token return type on pads. Update creation code accordingly. Reviewers: majnemer, rnk Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D12109 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@245798 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGCleanup.cpp b/lib/CodeGen/CGCleanup.cpp index e53793d489..95d2914df9 100644 --- a/lib/CodeGen/CGCleanup.cpp +++ b/lib/CodeGen/CGCleanup.cpp @@ -904,8 +904,7 @@ void CodeGenFunction::PopCleanupBlock(bool FallthroughIsBranchThrough) { llvm::BasicBlock *NextAction = getEHDispatchBlock(EHParent); if (CGM.getCodeGenOpts().NewMSEH && EHPersonality::get(*this).isMSVCPersonality()) - CPI = Builder.CreateCleanupPad(llvm::Type::getTokenTy(getLLVMContext()), - {}); + CPI = Builder.CreateCleanupPad({}); // We only actually emit the cleanup code if the cleanup is either // active or was used before it was deactivated. @@ -916,7 +915,7 @@ void CodeGenFunction::PopCleanupBlock(bool FallthroughIsBranchThrough) { } if (CPI) - Builder.CreateCleanupRet(NextAction, CPI); + Builder.CreateCleanupRet(CPI, NextAction); else Builder.CreateBr(NextAction); diff --git a/lib/CodeGen/CGException.cpp b/lib/CodeGen/CGException.cpp index 83285d9ca9..974da24563 100644 --- a/lib/CodeGen/CGException.cpp +++ b/lib/CodeGen/CGException.cpp @@ -887,11 +887,10 @@ static llvm::BasicBlock *emitMSVCCatchDispatchBlock(CodeGenFunction &CGF, if (EHPersonality::get(CGF).isMSVCXXPersonality()) { CGF.Builder.CreateCatchPad( - llvm::Type::getTokenTy(CGF.getLLVMContext()), Handler.Block, - NextBlock, {TypeValue, llvm::Constant::getNullValue(CGF.VoidPtrTy)}); + Handler.Block, NextBlock, + {TypeValue, llvm::Constant::getNullValue(CGF.VoidPtrTy)}); } else { - CGF.Builder.CreateCatchPad(llvm::Type::getTokenTy(CGF.getLLVMContext()), - Handler.Block, NextBlock, {TypeValue}); + CGF.Builder.CreateCatchPad(Handler.Block, NextBlock, {TypeValue}); } // Otherwise we need to emit and continue at that block. diff --git a/lib/CodeGen/MicrosoftCXXABI.cpp b/lib/CodeGen/MicrosoftCXXABI.cpp index 6b36987cd6..6a12cedd1b 100644 --- a/lib/CodeGen/MicrosoftCXXABI.cpp +++ b/lib/CodeGen/MicrosoftCXXABI.cpp @@ -859,7 +859,7 @@ struct CallEndCatchMSVC final : EHScopeStack::Cleanup { void Emit(CodeGenFunction &CGF, Flags flags) override { if (CGF.CGM.getCodeGenOpts().NewMSEH) { llvm::BasicBlock *BB = CGF.createBasicBlock("catchret.dest"); - CGF.Builder.CreateCatchRet(BB, CPI); + CGF.Builder.CreateCatchRet(CPI, BB); CGF.EmitBlock(BB); } else { CGF.EmitNounwindRuntimeCall(