//===-- 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