diff options
author | Reid Kleckner <reid@kleckner.net> | 2015-02-04 22:37:07 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2015-02-04 22:37:07 +0000 |
commit | aca01db706122a2c465ab43224281a2857255b25 (patch) | |
tree | b06da48786a839b6217aed3e2469c0ae64cd8ab0 /clang/lib/CodeGen/CodeGenFunction.cpp | |
parent | ba77ad75d3570863a0ca270336cf6de46dbb21ef (diff) | |
download | bcm5719-llvm-aca01db706122a2c465ab43224281a2857255b25.tar.gz bcm5719-llvm-aca01db706122a2c465ab43224281a2857255b25.zip |
Implement IRGen for SEH __finally and AbnormalTermination
Previously we would simply double-emit the body of the __finally block,
but that doesn't work when it contains any kind of Decl, which we can't
double emit.
This fixes that by emitting the block once and branching into a shared
code region and then branching back out.
llvm-svn: 228222
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 43c9dfe87a0..79425d4c21e 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -43,7 +43,8 @@ CodeGenFunction::CodeGenFunction(CodeGenModule &cgm, bool suppressNewContext) BlockInfo(nullptr), BlockPointer(nullptr), LambdaThisCaptureField(nullptr), NormalCleanupDest(nullptr), NextCleanupDestIndex(1), FirstBlockInfo(nullptr), EHResumeBlock(nullptr), - ExceptionSlot(nullptr), EHSelectorSlot(nullptr), SEHPointersDecl(nullptr), + ExceptionSlot(nullptr), EHSelectorSlot(nullptr), + AbnormalTerminationSlot(nullptr), SEHPointersDecl(nullptr), DebugInfo(CGM.getModuleDebugInfo()), DisableDebugInfo(false), DidCallStackSave(false), IndirectBranch(nullptr), PGO(cgm), SwitchInsn(nullptr), SwitchWeights(nullptr), CaseRangeBlock(nullptr), |