aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenFunction.h
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2015-04-29 17:17:17 +0000
committerReid Kleckner <reid@kleckner.net>2015-04-29 17:17:17 +0000
commit0bb12a89815932c862bd6e0650b5e46e4c4321ec (patch)
tree4c155549422f68d1892633412aeacb70a5a15273 /clang/lib/CodeGen/CodeGenFunction.h
parentddf3a0ef38f4e53ecbfc71cbf831c31521925e63 (diff)
downloadllvm-0bb12a89815932c862bd6e0650b5e46e4c4321ec.zip
llvm-0bb12a89815932c862bd6e0650b5e46e4c4321ec.tar.gz
llvm-0bb12a89815932c862bd6e0650b5e46e4c4321ec.tar.bz2
Re-land r236052, the linker errors were fixed by LLVM r236123
Basic __finally blocks don't cause linker errors anymore (although they are miscompiled). llvm-svn: 236128
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.h')
-rw-r--r--clang/lib/CodeGen/CodeGenFunction.h20
1 files changed, 17 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h
index 7eca347..8a007d5 100644
--- a/clang/lib/CodeGen/CodeGenFunction.h
+++ b/clang/lib/CodeGen/CodeGenFunction.h
@@ -310,7 +310,13 @@ public:
/// write the current selector value into this alloca.
llvm::AllocaInst *EHSelectorSlot;
- llvm::AllocaInst *AbnormalTerminationSlot;
+ /// Entering and leaving an SEH __try / __finally scope causes stores to this
+ /// slot.
+ llvm::Value *ChildAbnormalTerminationSlot;
+
+ /// The SEH __abnormal_termination() intrinsic lowers down to loads from this
+ /// slot from a parent function.
+ llvm::Value *AbnormalTerminationSlot;
/// The implicit parameter to SEH filter functions of type
/// 'EXCEPTION_POINTERS*'.
@@ -2033,8 +2039,16 @@ public:
/// Scan the outlined statement for captures from the parent function. For
/// each capture, mark the capture as escaped and emit a call to
/// llvm.framerecover. Insert the framerecover result into the LocalDeclMap.
- void EmitCapturedLocals(CodeGenFunction &ParentCGF, const Stmt *OutlinedStmt,
- llvm::Value *ParentFP);
+ void EmitCapturedLocals(CodeGenFunction &ParentCGF, const Stmt *OutlinedStmt);
+
+ /// Recovers the address of a local in a parent function. ParentVar is the
+ /// address of the variable used in the immediate parent function. It can
+ /// either be an alloca or a call to llvm.framerecover if there are nested
+ /// outlined functions. ParentFP is the frame pointer of the outermost parent
+ /// frame.
+ llvm::Value *recoverAddrOfEscapedLocal(CodeGenFunction &ParentCGF,
+ llvm::Value *ParentVar,
+ llvm::Value *ParentFP);
void EmitCXXForRangeStmt(const CXXForRangeStmt &S,
ArrayRef<const Attr *> Attrs = None);