diff options
author | Reid Kleckner <reid@kleckner.net> | 2015-04-07 00:09:59 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2015-04-07 00:09:59 +0000 |
commit | 67cf035a994bdbe87183751775d4bc7b816f52b1 (patch) | |
tree | f2e0c3dd3461e13803e3550b9d75af92c435e6c4 /clang/lib/CodeGen | |
parent | cc11b6c1fe006ff63d44718292d347eeb947a55a (diff) | |
download | bcm5719-llvm-67cf035a994bdbe87183751775d4bc7b816f52b1.tar.gz bcm5719-llvm-67cf035a994bdbe87183751775d4bc7b816f52b1.zip |
[WinEH] Don't create an alloca for unnamed catch parameters
The catch object parameter to llvm.eh.begincatch is optional, and can be
null. We can save some ourselves the stack space, copy ctor, and dtor
calls if we pass null.
llvm-svn: 234264
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/MicrosoftCXXABI.cpp | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/MicrosoftCXXABI.cpp b/clang/lib/CodeGen/MicrosoftCXXABI.cpp index 2a76203e71c..f00cd9c81df 100644 --- a/clang/lib/CodeGen/MicrosoftCXXABI.cpp +++ b/clang/lib/CodeGen/MicrosoftCXXABI.cpp @@ -809,7 +809,9 @@ void MicrosoftCXXABI::emitBeginCatch(CodeGenFunction &CGF, llvm::Function *BeginCatch = CGF.CGM.getIntrinsic(llvm::Intrinsic::eh_begincatch); - if (!CatchParam) { + // If this is a catch-all or the catch parameter is unnamed, we don't need to + // emit an alloca to the object. + if (!CatchParam || !CatchParam->getDeclName()) { llvm::Value *Args[2] = {Exn, llvm::Constant::getNullValue(CGF.Int8PtrTy)}; CGF.EmitNounwindRuntimeCall(BeginCatch, Args); CGF.EHStack.pushCleanup<CallEndCatchMSVC>(NormalAndEHCleanup); |