#include ">

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().

setBlockHelperAttributesVisibility()

tryCaptureAsConstant()