clang: lib/CodeGen/CGBlocks.cpp File Reference (original) (raw)
#include "[CGBlocks.h](CGBlocks%5F8h%5Fsource.html)"#include "[CGCXXABI.h](CGCXXABI%5F8h%5Fsource.html)"#include "[CGDebugInfo.h](CGDebugInfo%5F8h%5Fsource.html)"#include "[CGObjCRuntime.h](CGObjCRuntime%5F8h%5Fsource.html)"#include "[CGOpenCLRuntime.h](CGOpenCLRuntime%5F8h%5Fsource.html)"#include "[CodeGenFunction.h](CodeGenFunction%5F8h%5Fsource.html)"#include "[CodeGenModule.h](CodeGenModule%5F8h%5Fsource.html)"#include "[CodeGenPGO.h](CodeGenPGO%5F8h%5Fsource.html)"#include "[ConstantEmitter.h](ConstantEmitter%5F8h%5Fsource.html)"#include "[TargetInfo.h](lib%5F2CodeGen%5F2TargetInfo%5F8h%5Fsource.html)"#include "[clang/AST/Attr.h](AST%5F2Attr%5F8h%5Fsource.html)"#include "[clang/AST/DeclObjC.h](DeclObjC%5F8h%5Fsource.html)"#include "[clang/CodeGen/ConstantInitBuilder.h](ConstantInitBuilder%5F8h%5Fsource.html)"#include "llvm/IR/DataLayout.h"#include "llvm/IR/Module.h"#include "llvm/Support/ScopedPrinter.h"#include <algorithm>#include <cstdio>
Go to the source code of this file.
| Functions | |
|---|---|
| static llvm::Constant * | buildGlobalBlock (CodeGenModule &CGM, const CGBlockInfo &blockInfo, llvm::Constant *blockFn) |
| Build the given block as a global block. | |
| static llvm::Constant * | buildCopyHelper (CodeGenModule &CGM, const CGBlockInfo &blockInfo) |
| Build the helper function to copy a block. | |
| static llvm::Constant * | buildDisposeHelper (CodeGenModule &CGM, const CGBlockInfo &blockInfo) |
| Build the helper function to dispose of a block. | |
| static std::string | getBlockCaptureStr (const CGBlockInfo::Capture &Cap, CaptureStrKind StrKind, CharUnits BlockAlignment, CodeGenModule &CGM) |
| static std::string | getBlockDescriptorName (const CGBlockInfo &BlockInfo, CodeGenModule &CGM) |
| static llvm::Constant * | buildBlockDescriptor (CodeGenModule &CGM, const CGBlockInfo &blockInfo) |
| buildBlockDescriptor - Build the block descriptor meta-data for a block. | |
| static std::pair< BlockCaptureEntityKind, BlockFieldFlags > | computeCopyInfoForBlockCapture (const BlockDecl::Capture &CI, QualType T, const LangOptions &LangOpts) |
| static std::pair< BlockCaptureEntityKind, BlockFieldFlags > | computeDestroyInfoForBlockCapture (const BlockDecl::Capture &CI, QualType T, const LangOptions &LangOpts) |
| static void | addBlockLayout (CharUnits align, CharUnits size, const BlockDecl::Capture *capture, llvm::Type *type, QualType fieldType, SmallVectorImpl< BlockLayoutChunk > &Layout, CGBlockInfo &Info, CodeGenModule &CGM) |
| static bool | isSafeForCXXConstantCapture (QualType type) |
| Determines if the given type is safe for constant capture in C++. | |
| static llvm::Constant * | tryCaptureAsConstant (CodeGenModule &CGM, CodeGenFunction *CGF, const VarDecl *var) |
| It is illegal to modify a const object after initialization. | |
| static CharUnits | getLowBit (CharUnits v) |
| Get the low bit of a nonzero character count. | |
| static void | initializeForBlockHeader (CodeGenModule &CGM, CGBlockInfo &info, SmallVectorImpl< llvm::Type * > &elementTypes) |
| static QualType | getCaptureFieldType (const CodeGenFunction &CGF, const BlockDecl::Capture &CI) |
| static void | computeBlockInfo (CodeGenModule &CGM, CodeGenFunction *CGF, CGBlockInfo &info) |
| Compute the layout of the given block. | |
| static std::string | getCopyDestroyHelperFuncName (const SmallVectorImpl< CGBlockInfo::Capture > &Captures, CharUnits BlockAlignment, CaptureStrKind StrKind, CodeGenModule &CGM) |
| static void | pushCaptureCleanup (BlockCaptureEntityKind CaptureKind, Address Field, QualType CaptureType, BlockFieldFlags Flags, bool ForCopyHelper, VarDecl *Var, CodeGenFunction &CGF) |
| static void | setBlockHelperAttributesVisibility (bool CapturesNonExternalType, llvm::Function *Fn, const CGFunctionInfo &FI, CodeGenModule &CGM) |
| static BlockFieldFlags | getBlockFieldFlagsForObjCObjectPointer (const BlockDecl::Capture &CI, QualType T) |
| static llvm::Constant * | generateByrefCopyHelper (CodeGenFunction &CGF, const BlockByrefInfo &byrefInfo, BlockByrefHelpers &generator) |
| static llvm::Constant * | buildByrefCopyHelper (CodeGenModule &CGM, const BlockByrefInfo &byrefInfo, BlockByrefHelpers &generator) |
| Build the copy helper for a __block variable. | |
| static llvm::Constant * | generateByrefDisposeHelper (CodeGenFunction &CGF, const BlockByrefInfo &byrefInfo, BlockByrefHelpers &generator) |
| Generate code for a __block variable's dispose helper. | |
| static llvm::Constant * | buildByrefDisposeHelper (CodeGenModule &CGM, const BlockByrefInfo &byrefInfo, BlockByrefHelpers &generator) |
| Build the dispose helper for a __block variable. | |
| template | |
| static T * | buildByrefHelpers (CodeGenModule &CGM, const BlockByrefInfo &byrefInfo, T &&generator) |
| Lazily build the copy and dispose helpers for a __block variable with the given information. | |
| static void | configureBlocksRuntimeObject (CodeGenModule &CGM, llvm::Constant *C) |
| Adjust the declaration of something from the blocks API. |
◆ addBlockLayout()
◆ buildBlockDescriptor()
buildBlockDescriptor - Build the block descriptor meta-data for a block.
buildBlockDescriptor is accessed from 5th field of the Block_literal meta-data and contains stationary information about the block literal. Its definition will have 4 (or optionally 6) words.
struct Block_descriptor {
unsigned long reserved;
unsigned long size;
void *copy_func_helper_decl;
void *destroy_func_decl;
void *block_method_encoding_address;
void *block_layout_info;
};
Definition at line 151 of file CGBlocks.cpp.
References clang::CodeGen::ConstantInitBuilderTemplateBase< Traits >::beginStruct(), clang::PointerAuthOptions::BlockHelperFunctionPointers, clang::CodeGen::CGBlockInfo::BlockSize, buildCopyHelper(), buildDisposeHelper(), clang::CodeGen::CGObjCRuntime::BuildGCBlockLayout(), clang::CodeGen::CGObjCRuntime::BuildRCBlockLayout(), clang::C, clang::cast(), clang::CodeGen::CodeGenTypes::ConvertType(), clang::CodeGen::CodeGenModule::GetAddrOfConstantCString(), getBlockDescriptorName(), clang::CodeGen::CGBlockInfo::getBlockExpr(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getLLVMContext(), clang::CodeGen::CodeGenModule::getModule(), clang::ASTContext::getObjCEncodingForBlock(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::ConstantAddress::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CharUnits::getQuantity(), clang::CodeGen::CodeGenModule::getTypes(), clang::CodeGen::CGBlockInfo::NeedsCopyDispose, clang::LangOptionsBase::NonGC, clang::opencl_constant, clang::CodeGenOptions::PointerAuth, clang::CodeGen::CodeGenModule::supportsCOMDAT(), and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.
Referenced by buildGlobalBlock().
◆ buildByrefCopyHelper()
◆ buildByrefDisposeHelper()
◆ buildByrefHelpers()
◆ buildCopyHelper()
◆ buildDisposeHelper()
◆ buildGlobalBlock()
| llvm::Constant * buildGlobalBlock ( CodeGenModule & CGM, const CGBlockInfo & blockInfo, llvm::Constant * blockFn ) | static |
|---|
Build the given block as a global block.
Definition at line 1305 of file CGBlocks.cpp.
References clang::CodeGen::CodeGenModule::addUsedGlobal(), b, clang::CodeGen::ConstantInitBuilderTemplateBase< Traits >::beginStruct(), clang::CodeGen::BLOCK_HAS_SIGNATURE, clang::CodeGen::BLOCK_IS_GLOBAL, clang::CodeGen::BLOCK_USE_STRET, clang::CodeGen::CGBlockInfo::BlockAlign, clang::CodeGen::CGBlockInfo::BlockExpression, clang::CodeGen::CGBlockInfo::BlockSize, buildBlockDescriptor(), clang::CodeGen::CGBlockInfo::CanBeGlobal, clang::cast(), clang::Type::castAs(), clang::CodeGen::CodeGenTypes::ConvertType(), clang::CodeGen::CodeGenModule::getAddrOfGlobalBlockIfEmitted(), clang::CharUnits::getAsAlign(), clang::CodeGen::BlockFlags::getBitMask(), clang::CodeGen::CGBlockInfo::getBlockExpr(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getContext(), clang::ASTContext::getLangOpts(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getLLVMContext(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::CodeGenModule::getNSConcreteGlobalBlock(), clang::CodeGen::CodeGenModule::getOpenCLRuntime(), getPointeeType(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CharUnits::getQuantity(), clang::CodeGen::CodeGenModule::getTarget(), clang::ASTContext::getTargetAddressSpace(), clang::CodeGen::CodeGenModule::getTargetCodeGenInfo(), clang::CodeGen::TargetCodeGenInfo::getTargetOpenCLBlockHelper(), clang::TargetInfo::getTriple(), clang::Expr::getType(), clang::CodeGen::CodeGenModule::getTypes(), clang::Init, clang::CodeGen::CodeGenTypeCache::Int8PtrPtrTy, clang::CodeGen::CodeGenTypeCache::IntTy, clang::opencl_global, clang::CodeGenOptions::PointerAuth, clang::CodeGen::CGOpenCLRuntime::recordBlockInfo(), clang::CodeGen::CodeGenModule::setAddrOfGlobalBlock(), clang::CodeGen::CGBlockInfo::UsesStret, and clang::CodeGen::CodeGenTypeCache::VoidTy.
Referenced by clang::CodeGen::CodeGenFunction::GenerateBlockFunction().
◆ computeBlockInfo()
Compute the layout of the given block.
Attempts to lay the block out with minimal space requirements.
Definition at line 552 of file CGBlocks.cpp.
References addBlockLayout(), clang::CharUnits::alignTo(), clang::CodeGen::CGBlockInfo::BlockAlign, clang::CodeGen::CGBlockInfo::BlockHeaderForcedGapOffset, clang::CodeGen::CGBlockInfo::BlockHeaderForcedGapSize, clang::CodeGen::CGBlockInfo::BlockSize, clang::CodeGen::CGBlockInfo::buildCaptureMap(), clang::C, clang::CodeGen::CGBlockInfo::CanBeGlobal, clang::BlockDecl::capture_begin(), clang::BlockDecl::capture_end(), clang::BlockDecl::captures(), clang::BlockDecl::capturesCXXThis(), clang::CodeGen::CGBlockInfo::CapturesNonExternalType, clang::cast(), clang::CodeGen::CodeGenTypes::ConvertType(), clang::CodeGen::CodeGenTypes::ConvertTypeForMem(), clang::CodeGen::CodeGenFunction::CurFuncDecl, clang::BlockDecl::doesNotEscape(), clang::Type::getAsCXXRecordDecl(), clang::CodeGen::CGBlockInfo::getBlockDecl(), getCaptureFieldType(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getLLVMContext(), getLowBit(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CodeGen::CodeGenTypeCache::getPointerSize(), clang::CharUnits::getQuantity(), clang::CodeGen::CodeGenModule::getTargetCodeGenInfo(), clang::CodeGen::TargetCodeGenInfo::getTargetOpenCLBlockHelper(), clang::ValueDecl::getType(), clang::ASTContext::getTypeInfoInChars(), clang::CodeGen::CodeGenModule::getTypes(), clang::CodeGen::CGBlockInfo::HasCapturedVariableLayout, clang::BlockDecl::hasCaptures(), clang::CodeGen::CGBlockInfo::HasCXXObject, initializeForBlockHeader(), clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::CodeGen::CGBlockInfo::Capture::makeConstant(), clang::CodeGen::CGBlockInfo::NoEscape, clang::LangOptionsBase::NonGC, clang::CodeGen::CGBlockInfo::SortedCaptures, clang::CodeGen::CGBlockInfo::StructureType, tryCaptureAsConstant(), clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::CharUnits::Zero().
Referenced by clang::CodeGen::CodeGenFunction::EmitBlockLiteral(), and clang::CodeGen::CodeGenModule::GetAddrOfGlobalBlock().
◆ computeCopyInfoForBlockCapture()
Definition at line 1629 of file CGBlocks.cpp.
References clang::CodeGen::AddressDiscriminatedPointerAuth, clang::CodeGen::ARCStrong, clang::CodeGen::ARCWeak, clang::CodeGen::BLOCK_FIELD_IS_BLOCK, clang::CodeGen::BLOCK_FIELD_IS_BYREF, clang::CodeGen::BLOCK_FIELD_IS_OBJECT, clang::CodeGen::BLOCK_FIELD_IS_WEAK, clang::CodeGen::BlockObject, clang::CodeGen::CXXRecord, clang::BlockDecl::Capture::getCopyExpr(), clang::Qualifiers::getObjCLifetime(), clang::isBlockPointer(), clang::BlockDecl::Capture::isByRef(), clang::BlockDecl::Capture::isEscapingByref(), clang::CodeGen::None, clang::CodeGen::NonTrivialCStruct, clang::QualType::PCK_ARCStrong, clang::QualType::PCK_ARCWeak, clang::QualType::PCK_PtrAuth, clang::QualType::PCK_Struct, clang::QualType::PCK_Trivial, clang::QualType::PCK_VolatileTrivial, and clang::T.
Referenced by addBlockLayout().
◆ computeDestroyInfoForBlockCapture()
Definition at line 2075 of file CGBlocks.cpp.
References clang::CodeGen::ARCStrong, clang::CodeGen::ARCWeak, clang::CodeGen::BLOCK_FIELD_IS_BYREF, clang::CodeGen::BLOCK_FIELD_IS_WEAK, clang::CodeGen::BlockObject, clang::CodeGen::CXXRecord, clang::QualType::DK_cxx_destructor, clang::QualType::DK_none, clang::QualType::DK_nontrivial_c_struct, clang::QualType::DK_objc_strong_lifetime, clang::QualType::DK_objc_weak_lifetime, getBlockFieldFlagsForObjCObjectPointer(), clang::BlockDecl::Capture::isEscapingByref(), clang::CodeGen::None, clang::CodeGen::NonTrivialCStruct, and clang::T.
Referenced by addBlockLayout().
◆ configureBlocksRuntimeObject()
| void configureBlocksRuntimeObject ( CodeGenModule & CGM, llvm::Constant * C ) | static |
|---|
Adjust the declaration of something from the blocks API.
Definition at line 2890 of file CGBlocks.cpp.
References clang::C, clang::cast(), clang::TranslationUnitDecl::castToDeclContext(), clang::IdentifierTable::get(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getTarget(), clang::ASTContext::getTranslationUnitDecl(), clang::TargetInfo::getTriple(), clang::Decl::hasAttr(), clang::ASTContext::Idents, clang::isa(), clang::DeclContext::lookup(), and clang::CodeGen::CodeGenModule::setDSOLocal().
Referenced by clang::CodeGen::CodeGenModule::getBlockObjectAssign(), clang::CodeGen::CodeGenModule::getBlockObjectDispose(), clang::CodeGen::CodeGenModule::getNSConcreteGlobalBlock(), and clang::CodeGen::CodeGenModule::getNSConcreteStackBlock().
◆ generateByrefCopyHelper()
Definition at line 2397 of file CGBlocks.cpp.
References clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::BlockByrefInfo::ByrefAlignment, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::ApplyDebugLocation::CreateArtificial(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CodeGenFunction::emitBlockByrefAddress(), clang::CodeGen::BlockByrefHelpers::emitCopy(), clang::CodeGen::CodeGenFunction::FinishFunction(), clang::CodeGen::CodeGenFunction::GetAddrOfLocalVar(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::CodeGenModule::getTypes(), clang::CodeGen::BlockByrefHelpers::needsCopy(), clang::Other, clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), clang::CodeGen::CodeGenFunction::StartFunction(), and clang::CodeGen::BlockByrefInfo::Type.
Referenced by buildByrefCopyHelper().
◆ generateByrefDisposeHelper()
Generate code for a __block variable's dispose helper.
Definition at line 2464 of file CGBlocks.cpp.
References clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionDeclaration(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::BlockByrefInfo::ByrefAlignment, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::ApplyDebugLocation::CreateArtificial(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CodeGenFunction::emitBlockByrefAddress(), clang::CodeGen::BlockByrefHelpers::emitDispose(), clang::CodeGen::CodeGenFunction::FinishFunction(), clang::CodeGen::CodeGenFunction::GetAddrOfLocalVar(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::CodeGenModule::getTypes(), clang::CodeGen::BlockByrefHelpers::needsDispose(), clang::Other, clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), clang::CodeGen::CodeGenFunction::StartFunction(), clang::CodeGen::BlockByrefInfo::Type, and clang::ASTContext::VoidPtrTy.
Referenced by buildByrefDisposeHelper().
◆ getBlockCaptureStr()
Definition at line 1732 of file CGBlocks.cpp.
References clang::CodeGen::AddressDiscriminatedPointerAuth, clang::CharUnits::alignmentAtOffset(), clang::CodeGen::ARCStrong, clang::CodeGen::ARCWeak, clang::CodeGen::BLOCK_FIELD_IS_BLOCK, clang::CodeGen::BLOCK_FIELD_IS_BYREF, clang::CodeGen::BLOCK_FIELD_IS_OBJECT, clang::CodeGen::BLOCK_FIELD_IS_WEAK, clang::CodeGen::BlockObject, clang::BlockVarCopyInit::canThrow(), clang::CodeGen::CGBlockInfo::Capture::Cap, clang::CodeGen::CGBlockInfo::Capture::CopyFlags, clang::CodeGen::CGBlockInfo::Capture::CopyKind, clang::CodeGen::CodeGenFunction::cxxDestructorCanThrow(), clang::CodeGen::CXXRecord, clang::CodeGen::CGBlockInfo::Capture::DisposeFlags, clang::CodeGen::CGBlockInfo::Capture::DisposeKind, clang::CodeGen::BlockFieldFlags::getBitMask(), clang::ASTContext::getBlockVarCopyInit(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenModule::getCXXABI(), clang::CodeGen::CGCXXABI::getMangleContext(), clang::CodeGen::CodeGenFunction::getNonTrivialCopyConstructorStr(), clang::CodeGen::CodeGenFunction::getNonTrivialDestructorStr(), clang::CodeGen::CGBlockInfo::Capture::getOffset(), clang::QualType::getPointerAuth(), clang::ValueDecl::getType(), clang::BlockDecl::Capture::getVariable(), clang::QualType::isVolatileQualified(), clang::MangleContext::mangleCanonicalTypeName(), clang::CodeGen::None, and clang::CodeGen::NonTrivialCStruct.
Referenced by getBlockDescriptorName(), and getCopyDestroyHelperFuncName().
◆ getBlockDescriptorName()
Replace occurrences of '@' with '\1'. '@' is reserved on ELF platforms as a separator between symbol name and symbol version.
Definition at line 85 of file CGBlocks.cpp.
References clang::CodeGen::CGBlockInfo::BlockAlign, clang::CodeGen::CGBlockInfo::BlockSize, getBlockCaptureStr(), clang::CodeGen::CGBlockInfo::getBlockExpr(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::ASTContext::getObjCEncodingForBlock(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CharUnits::getQuantity(), clang::CodeGen::CGObjCRuntime::getRCBlockLayoutStr(), clang::CodeGen::CGBlockInfo::NeedsCopyDispose, clang::CodeGen::None, and clang::CodeGen::CGBlockInfo::SortedCaptures.
Referenced by buildBlockDescriptor().
◆ getBlockFieldFlagsForObjCObjectPointer()
◆ getCaptureFieldType()
◆ getCopyDestroyHelperFuncName()
◆ getLowBit()
◆ initializeForBlockHeader()
Definition at line 480 of file CGBlocks.cpp.
References clang::CodeGen::CGBlockInfo::BlockAlign, clang::CodeGen::CGBlockInfo::BlockSize, clang::CharUnits::fromQuantity(), clang::CodeGen::CodeGenModule::getBlockDescriptorType(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::CGOpenCLRuntime::getGenericVoidPointerType(), clang::CodeGen::CodeGenTypeCache::getIntAlign(), clang::CodeGen::CodeGenTypeCache::getIntSize(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenModule::getOpenCLRuntime(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::TargetInfo::getPointerAlign(), clang::CodeGen::CodeGenTypeCache::getPointerSize(), clang::TargetInfo::getPointerWidth(), clang::CharUnits::getQuantity(), clang::CodeGen::CodeGenModule::getTarget(), clang::CodeGen::CodeGenModule::getTargetCodeGenInfo(), clang::CodeGen::TargetCodeGenInfo::getTargetOpenCLBlockHelper(), clang::CodeGen::CodeGenTypeCache::IntTy, clang::opencl_generic, and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.
Referenced by computeBlockInfo().
◆ isSafeForCXXConstantCapture()
◆ pushCaptureCleanup()
Definition at line 1860 of file CGBlocks.cpp.
References clang::CodeGen::AddressDiscriminatedPointerAuth, clang::CodeGen::ARCStrong, clang::CodeGen::ARCWeak, clang::CodeGen::BlockObject, CanThrow(), clang::CodeGen::CodeGenFunction::cxxDestructorCanThrow(), clang::CodeGen::CXXRecord, clang::CodeGen::CodeGenFunction::destroyARCStrongImprecise, clang::CodeGen::EHCleanup, clang::CodeGen::CodeGenFunction::enterByrefCleanup(), clang::CodeGen::CodeGenFunction::getCleanupKind(), clang::CodeGen::CodeGenFunction::getDestroyer(), clang::CodeGen::CodeGenFunction::getLangOpts(), clang::QualType::isDestructedType(), clang::CodeGen::CodeGenFunction::needsEHCleanup(), clang::CodeGen::None, clang::CodeGen::NonTrivialCStruct, clang::CodeGen::NormalAndEHCleanup, and clang::CodeGen::CodeGenFunction::pushDestroy().
Referenced by clang::CodeGen::CodeGenFunction::GenerateCopyHelperFunction(), and clang::CodeGen::CodeGenFunction::GenerateDestroyHelperFunction().