| //===-- CGException.h - Classes for exceptions IR generation ----*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // These classes support the generation of LLVM IR for exceptions in |
| // C++ and Objective C. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef CLANG_CODEGEN_CGEXCEPTION_H |
| #define CLANG_CODEGEN_CGEXCEPTION_H |
| |
| #include "llvm/ADT/StringRef.h" |
| |
| namespace clang { |
| class LangOptions; |
| |
| namespace CodeGen { |
| |
| /// The exceptions personality for a function. When |
| class EHPersonality { |
| llvm::StringRef 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*). |
| llvm::StringRef CatchallRethrowFn; |
| |
| EHPersonality(llvm::StringRef PersonalityFn, |
| llvm::StringRef CatchallRethrowFn = llvm::StringRef()) |
| : PersonalityFn(PersonalityFn), |
| CatchallRethrowFn(CatchallRethrowFn) {} |
| |
| public: |
| static const EHPersonality &get(const LangOptions &Lang); |
| static const EHPersonality GNU_C; |
| static const EHPersonality GNU_C_SJLJ; |
| static const EHPersonality GNU_ObjC; |
| static const EHPersonality GNU_ObjCXX; |
| static const EHPersonality NeXT_ObjC; |
| static const EHPersonality GNU_CPlusPlus; |
| static const EHPersonality GNU_CPlusPlus_SJLJ; |
| |
| llvm::StringRef getPersonalityFnName() const { return PersonalityFn; } |
| llvm::StringRef getCatchallRethrowFnName() const { return CatchallRethrowFn; } |
| }; |
| |
| } |
| } |
| |
| #endif |