forked from OSchip/llvm-project
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:
parent
f3e0e3acda
commit
11c033e8aa
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue