blob: 5a743b51f66f6b7408a752eb0f1d8c95b0d9eabe [file] [log] [blame]
//===-- 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