|
clang 24.0.0git
|
#include "CGCXXABI.h"#include "CGCleanup.h"#include "CGDebugInfo.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 "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.
Namespaces | |
| namespace | clang |
| Top level wrappers for InstallAPI frontend operations. | |
| namespace | clang::CodeGen |
Functions | |
| static llvm::FunctionCallee | getFreeExceptionFn (CodeGenModule &CGM) |
| static llvm::FunctionCallee | getUnexpectedFn (CodeGenModule &CGM) |
| static llvm::FunctionCallee | getCatchallRethrowFn (CodeGenModule &CGM, StringRef Name) |
| static const EHPersonality & | getCPersonality (const TargetInfo &Target, const CodeGenOptions &CGOpts) |
| static const EHPersonality & | getObjCPersonality (const TargetInfo &Target, const CodeGenOptions &CGOpts, const LangOptions &L) |
| static const EHPersonality & | getCXXPersonality (const TargetInfo &Target, const CodeGenOptions &CGOpts) |
| static const EHPersonality & | getObjCXXPersonality (const TargetInfo &Target, const CodeGenOptions &CGOpts, 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) |
| const EHPersonality & | clang::CodeGen::getEHPersonality (CodeGenModule &CGM, const FunctionDecl *FD) |
Selects the personality function to use for FD, or for the translation unit as a whole when FD is null. | |
| const EHPersonality & | clang::CodeGen::getEHPersonality (CodeGenFunction &CGF) |
| Selects the personality function to use for the function currently being emitted. | |
| 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 1106 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(), emitCatchPadBlock(), emitWasmCatchPadBlock(), clang::CodeGen::CatchTypeInfo::Flags, clang::CodeGen::EHScope::getCachedEHDispatchBlock(), clang::CodeGen::CodeGenFunction::getEHDispatchBlock(), clang::CodeGen::getEHPersonality(), clang::CodeGen::EHScope::getEnclosingEHScope(), clang::CodeGen::EHCatchScope::getHandler(), clang::CodeGen::CodeGenModule::getIntrinsic(), clang::CodeGen::EHCatchScope::getNumHandlers(), clang::CodeGen::CodeGenFunction::getSelectorFromSlot(), clang::CodeGen::EHCatchScope::Handler::isCatchAll(), clang::CodeGen::CodeGenFunction::performAddrSpaceCast(), clang::CodeGen::CatchTypeInfo::RTTI, clang::CodeGen::EHCatchScope::Handler::Type, and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.
Referenced by clang::CodeGen::CodeGenFunction::ExitCXXTryStmt(), clang::CodeGen::CodeGenFunction::ExitSEHTryStmt(), and clang::CodeGen::CodeGenFunction::popCatchScope().
|
static |
Definition at line 954 of file CGException.cpp.
References clang::CodeGen::EHCatchScope::Handler::Block, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CurrentFuncletPad, clang::CodeGen::CodeGenFunction::EmitBlockAfterUses(), clang::CodeGen::EHScope::getCachedEHDispatchBlock(), clang::CodeGen::CodeGenFunction::getEHDispatchBlock(), clang::CodeGen::getEHPersonality(), 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 516 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 997 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, 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 77 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 347 of file CGException.cpp.
References clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitLandingPad(), and clang::CodeGen::CodeGenFunction::getTerminateLandingPad().
|
static |
Definition at line 85 of file CGException.cpp.
References clang::CodeGen::EHPersonality::GNU_C, clang::CodeGen::EHPersonality::GNU_C_SEH, clang::CodeGen::EHPersonality::GNU_C_SJLJ, clang::CodeGenOptions::hasDWARFExceptions(), clang::CodeGenOptions::hasSEHExceptions(), clang::CodeGenOptions::hasSjLjExceptions(), clang::CodeGen::EHPersonality::MSVC_CxxFrameHandler3, and clang::T.
|
static |
Definition at line 132 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::CodeGenOptions::hasDWARFExceptions(), clang::CodeGenOptions::hasSEHExceptions(), clang::CodeGenOptions::hasSjLjExceptions(), clang::CodeGenOptions::hasWasmExceptions(), clang::CodeGen::EHPersonality::MSVC_CxxFrameHandler3, clang::T, clang::CodeGen::EHPersonality::XL_CPlusPlus, and clang::CodeGen::EHPersonality::ZOS_CPlusPlus.
|
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 99 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::CodeGen::EHPersonality::GNU_Wasm_CPlusPlus, clang::ObjCRuntime::GNUstep, clang::CodeGen::EHPersonality::GNUstep_ObjC, clang::CodeGenOptions::hasSEHExceptions(), clang::CodeGenOptions::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.
|
static |
Determines the personality function to use when both C++ and Objective-C exceptions are being caught.
Definition at line 154 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::CodeGen::EHPersonality::GNU_Wasm_CPlusPlus, clang::ObjCRuntime::GNUstep, clang::ObjCRuntime::iOS, clang::ObjCRuntime::MacOSX, clang::CodeGen::EHPersonality::MSVC_CxxFrameHandler3, clang::LangOptions::ObjCRuntime, clang::ObjCRuntime::ObjFW, and clang::ObjCRuntime::WatchOS.
|
static |
Definition at line 241 of file CGException.cpp.
References clang::cast(), and getPersonalityFn().
Referenced by clang::CodeGen::CodeGenFunction::getInvokeDestImpl(), and clang::CodeGen::CodeGenFunction::getTerminateLandingPad().
|
static |
|
static |
Definition at line 191 of file CGException.cpp.
References clang::CodeGen::EHPersonality::MSVC_C_specific_handler, clang::CodeGen::EHPersonality::MSVC_except_handler, and clang::T.
|
static |
Definition at line 42 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 750 of file CGException.cpp.
References clang::cast(), clang::CodeGen::EHScope::Catch, clang::CodeGen::EHScope::Cleanup, clang::CodeGen::EHScope::Filter, clang::CodeGen::EHScope::getKind(), and clang::CodeGen::EHScope::Terminate.
Referenced by clang::CodeGen::CodeGenFunction::getInvokeDestImpl().
|
static |
Check whether a landingpad instruction only uses C++ features.
Definition at line 248 of file CGException.cpp.
References clang::cast().
Referenced by PersonalityHasOnlyCXXUses().
|
static |
Check whether a personality function could reasonably be swapped for a C++ personality function.
Definition at line 279 of file CGException.cpp.
References LandingPadHasOnlyCXXUses(), and PersonalityHasOnlyCXXUses().
Referenced by PersonalityHasOnlyCXXUses().