зеркало из https://github.com/microsoft/clang-1.git
Ensure we only generate one terminate handler.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90998 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
23e17c81d5
Коммит
182f383db1
|
@ -683,6 +683,9 @@ CodeGenFunction::EHCleanupBlock::~EHCleanupBlock() {
|
|||
}
|
||||
|
||||
llvm::BasicBlock *CodeGenFunction::getTerminateHandler() {
|
||||
if (TerminateHandler)
|
||||
return TerminateHandler;
|
||||
|
||||
llvm::BasicBlock *Cont = 0;
|
||||
|
||||
if (HaveInsertPoint()) {
|
||||
|
@ -702,7 +705,7 @@ llvm::BasicBlock *CodeGenFunction::getTerminateHandler() {
|
|||
CGM.getIntrinsic(llvm::Intrinsic::eh_selector);
|
||||
|
||||
// Set up terminate handler
|
||||
llvm::BasicBlock *TerminateHandler = createBasicBlock("terminate.handler");
|
||||
TerminateHandler = createBasicBlock("terminate.handler");
|
||||
EmitBlock(TerminateHandler);
|
||||
llvm::Value *Exc = Builder.CreateCall(llvm_eh_exception, "exc");
|
||||
// We are required to emit this call to satisfy LLVM, even
|
||||
|
|
|
@ -31,7 +31,7 @@ CodeGenFunction::CodeGenFunction(CodeGenModule &cgm)
|
|||
DebugInfo(0), IndirectBranch(0),
|
||||
SwitchInsn(0), CaseRangeBlock(0), InvokeDest(0),
|
||||
CXXThisDecl(0), CXXVTTDecl(0),
|
||||
ConditionalBranchLevel(0) {
|
||||
ConditionalBranchLevel(0), TerminateHandler(0) {
|
||||
LLVMIntTy = ConvertType(getContext().IntTy);
|
||||
LLVMPointerWidth = Target.getPointerWidth(0);
|
||||
Exceptions = getContext().getLangOptions().Exceptions;
|
||||
|
|
|
@ -422,6 +422,8 @@ private:
|
|||
/// getByrefValueFieldNumber - Given a declaration, returns the LLVM field
|
||||
/// number that holds the value.
|
||||
unsigned getByRefValueLLVMField(const ValueDecl *VD) const;
|
||||
|
||||
llvm::BasicBlock *TerminateHandler;
|
||||
|
||||
public:
|
||||
CodeGenFunction(CodeGenModule &cgm);
|
||||
|
@ -552,6 +554,7 @@ public:
|
|||
/// EmitEndEHSpec - Emit the end of the exception spec.
|
||||
void EmitEndEHSpec(const Decl *D);
|
||||
|
||||
/// getTerminateHandler - Return a handler that just calls terminate.
|
||||
llvm::BasicBlock *getTerminateHandler();
|
||||
|
||||
const llvm::Type *ConvertTypeForMem(QualType T);
|
||||
|
|
Загрузка…
Ссылка в новой задаче