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.

llvm-svn: 228982
This commit is contained in:
Reid Kleckner 2015-02-12 23:40:45 +00:00
parent f3e0e3acda
commit 11c033e8aa
4 changed files with 7 additions and 10 deletions

View File

@ -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);

View File

@ -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<bool> 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);
}

View File

@ -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),

View File

@ -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.