clang 20.0.0git
|
#include "CGCXXABI.h"
#include "CGCleanup.h"
#include "CGObjCRuntime.h"
#include "CodeGenFunction.h"
#include "ConstantEmitter.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/DiagnosticSema.h"
#include "clang/Basic/TargetBuiltins.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicsWebAssembly.h"
#include "llvm/Support/SaveAndRestore.h"
Go to the source code of this file.
Functions | |
static llvm::FunctionCallee | getFreeExceptionFn (CodeGenModule &CGM) |
static llvm::FunctionCallee | getSehTryBeginFn (CodeGenModule &CGM) |
static llvm::FunctionCallee | getSehTryEndFn (CodeGenModule &CGM) |
static llvm::FunctionCallee | getUnexpectedFn (CodeGenModule &CGM) |
static llvm::FunctionCallee | getCatchallRethrowFn (CodeGenModule &CGM, StringRef Name) |
static const EHPersonality & | getCPersonality (const TargetInfo &Target, const LangOptions &L) |
static const EHPersonality & | getObjCPersonality (const TargetInfo &Target, const LangOptions &L) |
static const EHPersonality & | getCXXPersonality (const TargetInfo &Target, const LangOptions &L) |
static const EHPersonality & | getObjCXXPersonality (const TargetInfo &Target, const LangOptions &L) |
Determines the personality function to use when both C++ and Objective-C exceptions are being caught. | |
static const EHPersonality & | getSEHPersonalityMSVC (const llvm::Triple &T) |
static llvm::FunctionCallee | getPersonalityFn (CodeGenModule &CGM, const EHPersonality &Personality) |
static llvm::Constant * | getOpaquePersonalityFn (CodeGenModule &CGM, const EHPersonality &Personality) |
static bool | LandingPadHasOnlyCXXUses (llvm::LandingPadInst *LPI) |
Check whether a landingpad instruction only uses C++ features. | |
static bool | PersonalityHasOnlyCXXUses (llvm::Constant *Fn) |
Check whether a personality function could reasonably be swapped for a C++ personality function. | |
static llvm::Constant * | getCatchAllValue (CodeGenFunction &CGF) |
Returns the value to inject into a selector to indicate the presence of a catch-all. | |
static void | emitFilterDispatchBlock (CodeGenFunction &CGF, EHFilterScope &filterScope) |
Emit the dispatch block for a filter scope if necessary. | |
static bool | isNonEHScope (const EHScope &S) |
Check whether this is a non-EH scope, i.e. | |
static void | emitCatchPadBlock (CodeGenFunction &CGF, EHCatchScope &CatchScope) |
static void | emitWasmCatchPadBlock (CodeGenFunction &CGF, EHCatchScope &CatchScope) |
static void | emitCatchDispatchBlock (CodeGenFunction &CGF, EHCatchScope &catchScope) |
Emit the structure of the dispatch block for the given catch scope. | |
|
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 1118 of file CGException.cpp.
References clang::CodeGen::EHCatchScope::Handler::Block, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::Default, clang::CodeGen::CodeGenFunction::EmitBlock(), clang::CodeGen::CodeGenFunction::EmitBlockAfterUses(), emitCatchPadBlock(), emitWasmCatchPadBlock(), clang::CodeGen::CatchTypeInfo::Flags, clang::CodeGen::EHPersonality::get(), clang::CodeGen::EHScope::getCachedEHDispatchBlock(), clang::CodeGen::CodeGenFunction::getEHDispatchBlock(), clang::CodeGen::EHScope::getEnclosingEHScope(), clang::CodeGen::CodeGenModule::GetGlobalVarAddressSpace(), clang::CodeGen::EHCatchScope::getHandler(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::EHCatchScope::getNumHandlers(), clang::CodeGen::CodeGenFunction::getSelectorFromSlot(), clang::CodeGen::CodeGenFunction::getTargetHooks(), clang::CodeGen::EHCatchScope::Handler::isCatchAll(), clang::CodeGen::TargetCodeGenInfo::performAddrSpaceCast(), clang::CodeGen::CatchTypeInfo::RTTI, clang::CodeGen::EHCatchScope::Handler::Type, and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.
|
static |
Definition at line 966 of file CGException.cpp.
References clang::CodeGen::EHCatchScope::Handler::Block, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CurrentFuncletPad, clang::CodeGen::CodeGenFunction::EmitBlockAfterUses(), clang::CodeGen::EHPersonality::get(), clang::CodeGen::EHScope::getCachedEHDispatchBlock(), clang::CodeGen::CodeGenFunction::getEHDispatchBlock(), clang::CodeGen::EHScope::getEnclosingEHScope(), clang::CodeGen::EHCatchScope::getHandler(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::CodeGen::EHCatchScope::getNumHandlers(), clang::CodeGen::EHCatchScope::Handler::Type, and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.
Referenced by emitCatchDispatchBlock().
|
static |
Emit the dispatch block for a filter scope if necessary.
Definition at line 543 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().
|
static |
Definition at line 1009 of file CGException.cpp.
References clang::CodeGen::EHCatchScope::Handler::Block, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CodeGenFunction::CurrentFuncletPad, E, clang::CodeGen::CodeGenFunction::EmitBlock(), clang::CodeGen::CodeGenFunction::EmitBlockAfterUses(), clang::CodeGen::EHScope::getCachedEHDispatchBlock(), clang::CodeGen::CodeGenFunction::getEHDispatchBlock(), clang::CodeGen::EHScope::getEnclosingEHScope(), clang::CodeGen::CodeGenFunction::getExceptionSlot(), clang::CodeGen::EHCatchScope::getHandler(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::CodeGen::EHCatchScope::getNumHandlers(), clang::CodeGen::EHCatchScope::Handler::isCatchAll(), clang::CodeGen::EHCatchScope::Handler::Type, and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.
Referenced by emitCatchDispatchBlock().
|
static |
Definition at line 89 of file CGException.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::CodeGenTypeCache::VoidTy.
|
static |
Returns the value to inject into a selector to indicate the presence of a catch-all.
Definition at line 376 of file CGException.cpp.
References clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
|
static |
Definition at line 133 of file CGException.cpp.
References clang::CodeGen::EHPersonality::GNU_C, clang::CodeGen::EHPersonality::GNU_C_SEH, clang::CodeGen::EHPersonality::GNU_C_SJLJ, clang::LangOptions::hasDWARFExceptions(), clang::LangOptions::hasSEHExceptions(), clang::LangOptions::hasSjLjExceptions(), clang::CodeGen::EHPersonality::MSVC_CxxFrameHandler3, and clang::T.
Referenced by clang::CodeGen::EHPersonality::get(), and getObjCPersonality().
|
static |
Definition at line 177 of file CGException.cpp.
References clang::CodeGen::EHPersonality::GNU_CPlusPlus, clang::CodeGen::EHPersonality::GNU_CPlusPlus_SEH, clang::CodeGen::EHPersonality::GNU_CPlusPlus_SJLJ, clang::CodeGen::EHPersonality::GNU_Wasm_CPlusPlus, clang::LangOptions::hasDWARFExceptions(), clang::LangOptions::hasSEHExceptions(), clang::LangOptions::hasSjLjExceptions(), clang::LangOptions::hasWasmExceptions(), clang::CodeGen::EHPersonality::MSVC_CxxFrameHandler3, clang::T, clang::CodeGen::EHPersonality::XL_CPlusPlus, and clang::CodeGen::EHPersonality::ZOS_CPlusPlus.
Referenced by clang::CodeGen::EHPersonality::get(), and getObjCXXPersonality().
|
static |
Definition at line 33 of file CGException.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::CodeGenTypeCache::VoidTy.
|
static |
Definition at line 147 of file CGException.cpp.
References clang::ObjCRuntime::FragileMacOSX, clang::ObjCRuntime::GCC, getCPersonality(), clang::ObjCRuntime::getKind(), clang::ObjCRuntime::getVersion(), clang::CodeGen::EHPersonality::GNU_CPlusPlus_SEH, clang::CodeGen::EHPersonality::GNU_ObjC, clang::CodeGen::EHPersonality::GNU_ObjC_SEH, clang::CodeGen::EHPersonality::GNU_ObjC_SJLJ, clang::ObjCRuntime::GNUstep, clang::CodeGen::EHPersonality::GNUstep_ObjC, clang::LangOptions::hasSEHExceptions(), clang::LangOptions::hasSjLjExceptions(), clang::ObjCRuntime::iOS, clang::ObjCRuntime::MacOSX, clang::CodeGen::EHPersonality::MSVC_CxxFrameHandler3, clang::CodeGen::EHPersonality::NeXT_ObjC, clang::LangOptions::ObjCRuntime, clang::ObjCRuntime::ObjFW, clang::T, and clang::ObjCRuntime::WatchOS.
Referenced by clang::CodeGen::EHPersonality::get(), and getObjCXXPersonality().
|
static |
Determines the personality function to use when both C++ and Objective-C exceptions are being caught.
Definition at line 199 of file CGException.cpp.
References clang::ObjCRuntime::FragileMacOSX, clang::ObjCRuntime::GCC, getCXXPersonality(), clang::ObjCRuntime::getKind(), getObjCPersonality(), clang::CodeGen::EHPersonality::GNU_CPlusPlus_SEH, clang::CodeGen::EHPersonality::GNU_ObjCXX, clang::ObjCRuntime::GNUstep, clang::ObjCRuntime::iOS, clang::ObjCRuntime::MacOSX, clang::CodeGen::EHPersonality::MSVC_CxxFrameHandler3, clang::LangOptions::ObjCRuntime, clang::ObjCRuntime::ObjFW, and clang::ObjCRuntime::WatchOS.
Referenced by clang::CodeGen::EHPersonality::get().
|
static |
Definition at line 270 of file CGException.cpp.
References getPersonalityFn().
|
static |
Definition at line 263 of file CGException.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenTypeCache::Int32Ty, and clang::CodeGen::EHPersonality::PersonalityFn.
Referenced by getOpaquePersonalityFn().
|
static |
Definition at line 231 of file CGException.cpp.
References clang::CodeGen::EHPersonality::MSVC_C_specific_handler, clang::CodeGen::EHPersonality::MSVC_except_handler, and clang::T.
Referenced by clang::CodeGen::EHPersonality::get().
|
static |
Definition at line 42 of file CGException.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), and clang::CodeGen::CodeGenTypeCache::VoidTy.
|
static |
Definition at line 48 of file CGException.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), and clang::CodeGen::CodeGenTypeCache::VoidTy.
|
static |
Definition at line 54 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 762 of file CGException.cpp.
References clang::CodeGen::EHScope::Catch, clang::CodeGen::EHScope::Cleanup, clang::CodeGen::EHScope::Filter, and clang::CodeGen::EHScope::Terminate.
|
static |
Check whether a landingpad instruction only uses C++ features.
Definition at line 277 of file CGException.cpp.
References E.
Referenced by PersonalityHasOnlyCXXUses().
|
static |
Check whether a personality function could reasonably be swapped for a C++ personality function.
Definition at line 308 of file CGException.cpp.
References E, LandingPadHasOnlyCXXUses(), and PersonalityHasOnlyCXXUses().
Referenced by PersonalityHasOnlyCXXUses().