clang
3.7.0
|
#include "CodeGenFunction.h"
#include "CGCXXABI.h"
#include "CGCleanup.h"
#include "CGObjCRuntime.h"
#include "TargetInfo.h"
#include "clang/AST/Mangle.h"
#include "clang/AST/StmtCXX.h"
#include "clang/AST/StmtObjC.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/Basic/TargetBuiltins.h"
#include "llvm/IR/CallSite.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/Support/SaveAndRestore.h"
Go to the source code of this file.
Functions | |
static llvm::Constant * | getFreeExceptionFn (CodeGenModule &CGM) |
static llvm::Constant * | getUnexpectedFn (CodeGenModule &CGM) |
static llvm::Constant * | getCatchallRethrowFn (CodeGenModule &CGM, StringRef Name) |
static bool | useLibGCCSEHPersonality (const llvm::Triple &T) |
static const EHPersonality & | getCPersonality (const llvm::Triple &T, const LangOptions &L) |
static const EHPersonality & | getObjCPersonality (const llvm::Triple &T, const LangOptions &L) |
static const EHPersonality & | getCXXPersonality (const llvm::Triple &T, const LangOptions &L) |
static const EHPersonality & | getObjCXXPersonality (const llvm::Triple &T, const LangOptions &L) |
static const EHPersonality & | getSEHPersonalityMSVC (const llvm::Triple &T) |
static llvm::Constant * | getPersonalityFn (CodeGenModule &CGM, const EHPersonality &Personality) |
static llvm::Constant * | getOpaquePersonalityFn (CodeGenModule &CGM, const EHPersonality &Personality) |
static bool | PersonalityHasOnlyCXXUses (llvm::Constant *Fn) |
static llvm::Constant * | getCatchAllValue (CodeGenFunction &CGF) |
static void | emitFilterDispatchBlock (CodeGenFunction &CGF, EHFilterScope &filterScope) |
Emit the dispatch block for a filter scope if necessary. More... | |
static bool | isNonEHScope (const EHScope &S) |
static void | emitCatchDispatchBlock (CodeGenFunction &CGF, EHCatchScope &catchScope) |
|
static |
Emit the structure of the dispatch block for the given catch scope. It is an invariant that the dispatch block already exists.
Definition at line 825 of file CGException.cpp.
References clang::CodeGen::EHCatchScope::Handler::Block, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CodeGenFunction::EmitBlock(), clang::CodeGen::CodeGenFunction::EmitBlockAfterUses(), clang::CodeGen::EHScope::getCachedEHDispatchBlock(), clang::CodeGen::CodeGenFunction::getEHDispatchBlock(), clang::CodeGen::EHScope::getEnclosingEHScope(), clang::CodeGen::EHCatchScope::getHandler(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::EHCatchScope::getNumHandlers(), clang::CodeGen::CodeGenFunction::getSelectorFromSlot(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::EHCatchScope::Handler::isCatchAll(), and clang::CodeGen::EHCatchScope::Handler::Type.
Referenced by clang::CodeGen::CodeGenFunction::ExitCXXTryStmt(), clang::CodeGen::CodeGenFunction::ExitSEHTryStmt(), and clang::CodeGen::CodeGenFunction::popCatchScope().
|
static |
Emit the dispatch block for a filter scope if necessary.
Definition at line 479 of file CGException.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CodeGenFunction::EmitBlock(), clang::CodeGen::CodeGenFunction::EmitBlockAfterUses(), clang::CodeGen::CodeGenFunction::EmitRuntimeCall(), clang::CodeGen::EHScope::getCachedEHDispatchBlock(), clang::CodeGen::CodeGenFunction::getEHResumeBlock(), clang::CodeGen::CodeGenFunction::getExceptionFromSlot(), clang::CodeGen::EHFilterScope::getNumFilters(), clang::CodeGen::CodeGenFunction::getSelectorFromSlot(), and getUnexpectedFn().
Referenced by clang::CodeGen::CodeGenFunction::EmitEndEHSpec().
|
static |
Definition at line 76 of file CGException.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::CodeGenTypeCache::VoidTy.
Referenced by clang::CodeGen::CodeGenFunction::getEHResumeBlock().
|
static |
Returns the value to inject into a selector to indicate the presence of a catch-all.
Definition at line 350 of file CGException.cpp.
References clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitLandingPad(), and clang::CodeGen::CodeGenFunction::getTerminateLandingPad().
|
static |
Definition at line 148 of file CGException.cpp.
References useLibGCCSEHPersonality().
Referenced by getObjCPersonality().
|
static |
Definition at line 176 of file CGException.cpp.
References useLibGCCSEHPersonality().
Referenced by getObjCXXPersonality().
|
static |
Definition at line 32 of file CGException.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::CodeGenTypeCache::VoidTy.
|
static |
Definition at line 157 of file CGException.cpp.
References clang::ObjCRuntime::FragileMacOSX, clang::ObjCRuntime::GCC, getCPersonality(), clang::ObjCRuntime::getKind(), clang::ObjCRuntime::getVersion(), clang::ObjCRuntime::GNUstep, clang::ObjCRuntime::iOS, clang::ObjCRuntime::MacOSX, clang::LangOptions::ObjCRuntime, and clang::ObjCRuntime::ObjFW.
|
static |
Determines the personality function to use when both C++ and Objective-C exceptions are being caught.
Definition at line 187 of file CGException.cpp.
References clang::ObjCRuntime::FragileMacOSX, clang::ObjCRuntime::GCC, getCXXPersonality(), clang::ObjCRuntime::getKind(), clang::ObjCRuntime::GNUstep, clang::ObjCRuntime::iOS, clang::ObjCRuntime::MacOSX, clang::LangOptions::ObjCRuntime, and clang::ObjCRuntime::ObjFW.
|
static |
Definition at line 254 of file CGException.cpp.
References getPersonalityFn(), and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitLandingPad(), and clang::CodeGen::CodeGenFunction::getTerminateLandingPad().
|
static |
Definition at line 246 of file CGException.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), and clang::CodeGen::CodeGenTypeCache::Int32Ty.
Referenced by getOpaquePersonalityFn().
|
static |
Definition at line 213 of file CGException.cpp.
|
static |
Definition at line 41 of file CGException.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::CodeGenTypeCache::VoidTy.
Referenced by emitFilterDispatchBlock().
Check whether this is a non-EH scope, i.e. a scope which doesn't affect exception handling. Currently, the only non-EH scopes are normal-only cleanup scopes.
Definition at line 635 of file CGException.cpp.
References clang::CodeGen::EHScope::Catch, clang::CodeGen::EHScope::Cleanup, clang::CodeGen::EHScope::Filter, clang::CodeGen::EHScope::getKind(), S, and clang::CodeGen::EHScope::Terminate.
Referenced by clang::CodeGen::CodeGenFunction::getInvokeDestImpl().
|
static |
Check whether a personality function could reasonably be swapped for a C++ personality function.
Definition at line 262 of file CGException.cpp.
|
static |
On Win64, use libgcc's SEH personality function. We fall back to dwarf on other platforms, unless the user asked for SjLj exceptions.
Definition at line 144 of file CGException.cpp.
Referenced by getCPersonality(), and getCXXPersonality().