clang 17.0.0git
|
#include "CGBlocks.h"
#include "CGCXXABI.h"
#include "CGDebugInfo.h"
#include "CGObjCRuntime.h"
#include "CGOpenCLRuntime.h"
#include "CodeGenFunction.h"
#include "CodeGenModule.h"
#include "ConstantEmitter.h"
#include "TargetInfo.h"
#include "clang/AST/Attr.h"
#include "clang/AST/DeclObjC.h"
#include "clang/CodeGen/ConstantInitBuilder.h"
#include "llvm/ADT/SmallSet.h"
#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<class T > | |
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. | |
|
static |
Definition at line 405 of file CGBlocks.cpp.
References computeCopyInfoForBlockCapture(), computeDestroyInfoForBlockCapture(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CGBlockInfo::NeedsCopyDispose, clang::CodeGen::CGBlockInfo::NoEscape, clang::CodeGen::None, and clang::ast_matchers::type.
Referenced by computeBlockInfo().
|
static |
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.
Definition at line 169 of file CGBlocks.cpp.
References clang::CodeGen::ConstantInitBuilderTemplateBase< Traits >::beginStruct(), clang::CodeGen::CGBlockInfo::BlockSize, buildCopyHelper(), buildDisposeHelper(), clang::CodeGen::CGObjCRuntime::BuildGCBlockLayout(), clang::CodeGen::CGObjCRuntime::BuildRCBlockLayout(), clang::C, clang::CodeGen::CodeGenTypes::ConvertType(), clang::CodeGen::CodeGenModule::GetAddrOfConstantCString(), getBlockDescriptorName(), clang::CodeGen::CodeGenModule::getBlockDescriptorType(), clang::CodeGen::CGBlockInfo::getBlockExpr(), 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::LangOptions::NonGC, clang::opencl_constant, clang::CodeGen::CodeGenModule::supportsCOMDAT(), and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.
Referenced by buildGlobalBlock().
|
static |
Build the copy helper for a __block variable.
Definition at line 2395 of file CGBlocks.cpp.
References generateByrefCopyHelper().
Referenced by buildByrefHelpers().
|
static |
Build the dispose helper for a __block variable.
Definition at line 2452 of file CGBlocks.cpp.
References generateByrefDisposeHelper().
Referenced by buildByrefHelpers().
|
static |
Lazily build the copy and dispose helpers for a __block variable with the given information.
Definition at line 2462 of file CGBlocks.cpp.
References buildByrefCopyHelper(), buildByrefDisposeHelper(), clang::CodeGen::CodeGenModule::ByrefHelpersCache, and clang::CodeGen::CodeGenModule::getContext().
|
static |
Build the helper function to copy a block.
Definition at line 56 of file CGBlocks.cpp.
References clang::CodeGen::CodeGenFunction::GenerateCopyHelperFunction().
Referenced by buildBlockDescriptor().
|
static |
Build the helper function to dispose of a block.
Definition at line 62 of file CGBlocks.cpp.
References clang::CodeGen::CodeGenFunction::GenerateDestroyHelperFunction().
Referenced by buildBlockDescriptor().
|
static |
Build the given block as a global block.
Definition at line 1310 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::CodeGen::CodeGenTypes::ConvertType(), clang::CodeGen::CodeGenModule::getAddrOfGlobalBlockIfEmitted(), clang::CharUnits::getAsAlign(), clang::CodeGen::BlockFlags::getBitMask(), clang::CodeGen::CGBlockInfo::getBlockExpr(), 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(), 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::CodeGen::CodeGenTypeCache::Int8PtrPtrTy, clang::CodeGen::CodeGenTypeCache::IntTy, clang::opencl_global, clang::CodeGen::CGOpenCLRuntime::recordBlockInfo(), clang::Result, clang::CodeGen::CodeGenModule::setAddrOfGlobalBlock(), clang::CodeGen::CGBlockInfo::UsesStret, and clang::CodeGen::CodeGenTypeCache::VoidTy.
|
static |
Compute the layout of the given block.
Attempts to lay the block out with minimal space requirements.
Definition at line 570 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::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::BlockDecl::Capture::getVariable(), clang::CodeGen::CGBlockInfo::HasCapturedVariableLayout, clang::BlockDecl::hasCaptures(), clang::BlockDecl::Capture::hasCopyExpr(), clang::CodeGen::CGBlockInfo::HasCXXObject, initializeForBlockHeader(), clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::BlockDecl::Capture::isEscapingByref(), clang::CodeGen::CGBlockInfo::Capture::makeConstant(), clang::CodeGen::CGBlockInfo::NoEscape, clang::LangOptions::NonGC, clang::CodeGen::CGBlockInfo::SortedCaptures, clang::CodeGen::CGBlockInfo::StructureType, tryCaptureAsConstant(), clang::CodeGen::CodeGenTypeCache::VoidPtrTy, and clang::CharUnits::Zero().
Referenced by clang::CodeGen::CodeGenModule::GetAddrOfGlobalBlock().
|
static |
Definition at line 1615 of file CGBlocks.cpp.
References 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::QualType::getQualifiers(), isBlockPointer(), clang::Type::isBlockPointerType(), clang::BlockDecl::Capture::isByRef(), clang::BlockDecl::Capture::isEscapingByref(), clang::QualType::isNonTrivialToPrimitiveCopy(), clang::QualType::isObjCGCWeak(), clang::Type::isObjCInertUnsafeUnretainedType(), clang::Type::isObjCRetainableType(), clang::CodeGen::None, clang::CodeGen::NonTrivialCStruct, clang::QualType::PCK_ARCStrong, clang::QualType::PCK_ARCWeak, clang::QualType::PCK_Struct, clang::QualType::PCK_Trivial, and clang::QualType::PCK_VolatileTrivial.
Referenced by addBlockLayout().
|
static |
Definition at line 2040 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::QualType::getQualifiers(), clang::Qualifiers::hasObjCLifetime(), clang::QualType::isDestructedType(), clang::BlockDecl::Capture::isEscapingByref(), clang::QualType::isObjCGCWeak(), clang::Type::isObjCInertUnsafeUnretainedType(), clang::Type::isObjCRetainableType(), clang::CodeGen::None, and clang::CodeGen::NonTrivialCStruct.
Referenced by addBlockLayout().
|
static |
Adjust the declaration of something from the blocks API.
Definition at line 2823 of file CGBlocks.cpp.
References clang::C, clang::TranslationUnitDecl::castToDeclContext(), clang::IdentifierTable::get(), 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::DeclContext::lookup(), clang::Result, and clang::CodeGen::CodeGenModule::setDSOLocal().
Referenced by clang::CodeGen::CodeGenModule::getBlockObjectAssign(), clang::CodeGen::CodeGenModule::getBlockObjectDispose(), clang::CodeGen::CodeGenModule::getNSConcreteGlobalBlock(), and clang::CodeGen::CodeGenModule::getNSConcreteStackBlock().
|
static |
Definition at line 2335 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::CreateElementBitCast(), 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::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::CodeGen::BlockByrefHelpers::needsCopy(), clang::ImplicitParamDecl::Other, clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), clang::CodeGen::CodeGenFunction::StartFunction(), clang::CodeGen::BlockByrefInfo::Type, clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by buildByrefCopyHelper().
|
static |
Generate code for a __block variable's dispose helper.
Definition at line 2404 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::CreateElementBitCast(), 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::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::CodeGen::BlockByrefHelpers::needsDispose(), clang::ImplicitParamDecl::Other, clang::CodeGen::CodeGenModule::SetInternalFunctionAttributes(), clang::CodeGen::CodeGenFunction::StartFunction(), clang::CodeGen::BlockByrefInfo::Type, clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by buildByrefDisposeHelper().
|
static |
Definition at line 1711 of file CGBlocks.cpp.
References 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::ValueDecl::getType(), clang::BlockDecl::Capture::getVariable(), clang::QualType::isVolatileQualified(), clang::MangleContext::mangleTypeName(), clang::CodeGen::None, and clang::CodeGen::NonTrivialCStruct.
Referenced by getBlockDescriptorName(), and getCopyDestroyHelperFuncName().
|
static |
Replace occurrences of '@' with '\1'. '@' is reserved on ELF platforms as a separator between symbol name and symbol version.
Definition at line 107 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().
|
static |
Definition at line 2031 of file CGBlocks.cpp.
References clang::CodeGen::BLOCK_FIELD_IS_BLOCK, clang::CodeGen::BLOCK_FIELD_IS_OBJECT, and clang::Type::isBlockPointerType().
Referenced by computeDestroyInfoForBlockCapture().
|
static |
Definition at line 551 of file CGBlocks.cpp.
References clang::CodeGen::CodeGenFunction::BlockInfo, clang::CodeGen::CGBlockInfo::Capture::fieldType(), clang::CodeGen::CGBlockInfo::getCapture(), clang::CodeGen::CodeGenFunction::getContext(), clang::ASTContext::getLValueReferenceType(), clang::ValueDecl::getType(), clang::BlockDecl::Capture::getVariable(), clang::BlockDecl::Capture::isNested(), clang::VarDecl::isNonEscapingByref(), and clang::CodeGen::CodeGenFunction::LambdaCaptureFields.
Referenced by computeBlockInfo().
|
static |
Definition at line 1807 of file CGBlocks.cpp.
References getBlockCaptureStr(), clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getLangOpts(), and clang::CharUnits::getQuantity().
Get the low bit of a nonzero character count.
This is the alignment of the nth byte if the 0th byte is universally aligned.
Definition at line 494 of file CGBlocks.cpp.
References clang::CharUnits::fromQuantity(), and v.
Referenced by computeBlockInfo().
|
static |
Definition at line 498 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, Offset, clang::opencl_generic, and clang::CodeGen::CodeGenTypeCache::VoidPtrTy.
Referenced by computeBlockInfo().
Determines if the given type is safe for constant capture in C++.
Definition at line 438 of file CGBlocks.cpp.
References clang::ast_matchers::recordType, and clang::ast_matchers::type.
Referenced by tryCaptureAsConstant().
|
static |
Definition at line 1832 of file CGBlocks.cpp.
References 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().
|
static |
|
static |
It is illegal to modify a const object after initialization.
Therefore, if a const object has a constant initializer, we don't actually need to keep storage for it in the block; we'll just rematerialize it at the start of the block function. This is acceptable because we make no promises about address stability of captured variables.
Definition at line 462 of file CGBlocks.cpp.
References clang::VarDecl::getInit(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::ValueDecl::getType(), isSafeForCXXConstantCapture(), clang::CodeGen::ConstantEmitter::tryEmitAbstractForInitializer(), and clang::ast_matchers::type.
Referenced by computeBlockInfo().