diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-07-22 23:46:21 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-07-22 23:46:21 +0000 |
commit | c28d46ea3cf1d961e3ba3cc8fd09ebd83f2d3405 (patch) | |
tree | f200a1666b6c995dec52d08cf97650f0243331b0 /clang/lib/CodeGen/CGCleanup.h | |
parent | 51fd8a020b05037ce7215ccc6f6f3486a157e8b4 (diff) | |
download | bcm5719-llvm-c28d46ea3cf1d961e3ba3cc8fd09ebd83f2d3405.tar.gz bcm5719-llvm-c28d46ea3cf1d961e3ba3cc8fd09ebd83f2d3405.zip |
Move EHPersonality to CGCleanup
This makes it possible to use EHPersonality in other parts of CodeGen.
Differential Revision: http://reviews.llvm.org/D11440
llvm-svn: 242971
Diffstat (limited to 'clang/lib/CodeGen/CGCleanup.h')
-rw-r--r-- | clang/lib/CodeGen/CGCleanup.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGCleanup.h b/clang/lib/CodeGen/CGCleanup.h index 34866d4c47c..8338691ab5d 100644 --- a/clang/lib/CodeGen/CGCleanup.h +++ b/clang/lib/CodeGen/CGCleanup.h @@ -26,7 +26,10 @@ class AllocaInst; } namespace clang { +class FunctionDecl; namespace CodeGen { +class CodeGenModule; +class CodeGenFunction; /// A protected scope for zero-cost EH handling. class EHScope { @@ -560,6 +563,32 @@ EHScopeStack::stabilize(iterator ir) const { return stable_iterator(EndOfBuffer - ir.Ptr); } +/// The exceptions personality for a function. +struct EHPersonality { + const char *PersonalityFn; + + // If this is non-null, this personality requires a non-standard + // function for rethrowing an exception after a catchall cleanup. + // This function must have prototype void(void*). + const char *CatchallRethrowFn; + + static const EHPersonality &get(CodeGenModule &CGM, const FunctionDecl *FD); + static const EHPersonality &get(CodeGenFunction &CGF); + + static const EHPersonality GNU_C; + static const EHPersonality GNU_C_SJLJ; + static const EHPersonality GNU_C_SEH; + static const EHPersonality GNU_ObjC; + static const EHPersonality GNUstep_ObjC; + static const EHPersonality GNU_ObjCXX; + static const EHPersonality NeXT_ObjC; + static const EHPersonality GNU_CPlusPlus; + static const EHPersonality GNU_CPlusPlus_SJLJ; + static const EHPersonality GNU_CPlusPlus_SEH; + static const EHPersonality MSVC_except_handler; + static const EHPersonality MSVC_C_specific_handler; + static const EHPersonality MSVC_CxxFrameHandler3; +}; } } |