From 1c8ffd055a9461506b80ba4ba59978880c826c3e Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Thu, 12 Feb 2015 23:40:45 +0000 Subject: [PATCH] SEH: Use the SEHTryEpilogueStack instead of a separate bool We don't need a bool to track this now that we have a stack for it. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@228982 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGCall.cpp | 2 +- lib/CodeGen/CGException.cpp | 7 ++----- lib/CodeGen/CodeGenFunction.cpp | 2 +- lib/CodeGen/CodeGenFunction.h | 6 +++--- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp index 60ab2effbe..90cf5ee65d 100644 --- a/lib/CodeGen/CGCall.cpp +++ b/lib/CodeGen/CGCall.cpp @@ -3326,7 +3326,7 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo, llvm::Attribute::AlwaysInline); // Disable inlining inside SEH __try blocks. - if (IsSEHTryScope) + if (isSEHTryScope()) Attrs = Attrs.addAttribute(getLLVMContext(), llvm::AttributeSet::FunctionIndex, llvm::Attribute::NoInline); diff --git a/lib/CodeGen/CGException.cpp b/lib/CodeGen/CGException.cpp index a76b3d82ab..61f538b0ee 100644 --- a/lib/CodeGen/CGException.cpp +++ b/lib/CodeGen/CGException.cpp @@ -21,7 +21,6 @@ #include "clang/AST/StmtObjC.h" #include "llvm/IR/CallSite.h" #include "llvm/IR/Intrinsics.h" -#include "llvm/Support/SaveAndRestore.h" using namespace clang; using namespace CodeGen; @@ -1708,17 +1707,15 @@ void CodeGenFunction::EmitSEHTryStmt(const SEHTryStmt &S) { EnterSEHTryStmt(S, FI); { JumpDest TryExit = getJumpDestInCurrentScope("__try.__leave"); - SEHTryEpilogueStack.push_back(&TryExit); - // Disable inlining inside SEH __try scopes. - SaveAndRestore Saver(IsSEHTryScope, true); + SEHTryEpilogueStack.push_back(&TryExit); EmitStmt(S.getTryBlock()); + SEHTryEpilogueStack.pop_back(); if (!TryExit.getBlock()->use_empty()) EmitBlock(TryExit.getBlock(), /*IsFinished=*/true); else delete TryExit.getBlock(); - SEHTryEpilogueStack.pop_back(); } ExitSEHTryStmt(S, FI); } diff --git a/lib/CodeGen/CodeGenFunction.cpp b/lib/CodeGen/CodeGenFunction.cpp index 43dd7a05de..79425d4c21 100644 --- a/lib/CodeGen/CodeGenFunction.cpp +++ b/lib/CodeGen/CodeGenFunction.cpp @@ -40,7 +40,7 @@ CodeGenFunction::CodeGenFunction(CodeGenModule &cgm, bool suppressNewContext) CurFn(nullptr), CapturedStmtInfo(nullptr), SanOpts(CGM.getLangOpts().Sanitize), IsSanitizerScope(false), CurFuncIsThunk(false), AutoreleaseResult(false), SawAsmBlock(false), - IsSEHTryScope(false), BlockInfo(nullptr), BlockPointer(nullptr), + BlockInfo(nullptr), BlockPointer(nullptr), LambdaThisCaptureField(nullptr), NormalCleanupDest(nullptr), NextCleanupDestIndex(1), FirstBlockInfo(nullptr), EHResumeBlock(nullptr), ExceptionSlot(nullptr), EHSelectorSlot(nullptr), diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h index 67188dfa0a..12f066bf17 100644 --- a/lib/CodeGen/CodeGenFunction.h +++ b/lib/CodeGen/CodeGenFunction.h @@ -263,9 +263,6 @@ public: /// potentially set the return value. bool SawAsmBlock; - /// Codegen is currently inside an SEH try block. - bool IsSEHTryScope; - const CodeGen::CGBlockInfo *BlockInfo; llvm::Value *BlockPointer; @@ -365,6 +362,9 @@ public: llvm::BasicBlock *ResumeBB; }; + /// Returns true inside SEH __try blocks. + bool isSEHTryScope() const { return !SEHTryEpilogueStack.empty(); } + /// pushFullExprCleanup - Push a cleanup to be run at the end of the /// current full-expression. Safe against the possibility that /// we're currently inside a conditionally-evaluated expression. -- 2.40.0