clang
3.7.0
|
#include "CGDebugInfo.h"
#include "CGObjCRuntime.h"
#include "CodeGenFunction.h"
#include "CodeGenModule.h"
#include "TargetInfo.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/StmtObjC.h"
#include "clang/Basic/Diagnostic.h"
#include "clang/CodeGen/CGFunctionInfo.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/IR/CallSite.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/InlineAsm.h"
Go to the source code of this file.
Typedefs | |
typedef llvm::PointerIntPair < llvm::Value *, 1, bool > | TryEmitResult |
typedef llvm::PointerIntPair<llvm::Value*,1,bool> TryEmitResult |
Definition at line 31 of file CGObjC.cpp.
|
static |
Adjust the type of an Objective-C object that doesn't match up due to type erasure at various points, e.g., related result types or the use of parameterized classes.
Definition at line 253 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::RValue::get(), clang::CodeGen::RValue::getScalarVal(), and clang::Type::isObjCRetainableType().
Referenced by clang::CodeGen::CodeGenFunction::EmitObjCMessageExpr().
|
static |
Definition at line 1788 of file CGObjC.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::ObjCRuntime::hasNativeARC(), and clang::LangOptions::ObjCRuntime.
Referenced by emitARCCopyOperation(), clang::CodeGen::CodeGenFunction::EmitARCDestroyWeak(), emitARCLoadOperation(), clang::CodeGen::CodeGenFunction::EmitARCRelease(), emitARCStoreOperation(), clang::CodeGen::CodeGenFunction::EmitARCStoreStrongCall(), emitARCValueOperation(), clang::CodeGen::CodeGenFunction::EmitObjCAutoreleasePoolPop(), and clang::CodeGen::CodeGenFunction::EmitObjCAutoreleasePoolPush().
|
static |
Like CodeGenFunction::destroyARCStrong, but do it with a call.
Definition at line 1330 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::EmitARCStoreStrongCall(), and getNullForVariable().
Referenced by emitCXXDestructMethod().
|
static |
Perform an operation having the following signature: void (i8**, i8**)
Definition at line 1899 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, createARCRuntimeFunction(), clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall(), and clang::CodeGen::CodeGenTypeCache::Int8PtrPtrTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitARCCopyWeak(), and clang::CodeGen::CodeGenFunction::EmitARCMoveWeak().
|
static |
Perform an operation having the following signature: i8* (i8**)
Definition at line 1840 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, createARCRuntimeFunction(), clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall(), getElementType(), clang::CodeGen::CodeGenTypeCache::Int8PtrPtrTy, and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitARCLoadWeak(), and clang::CodeGen::CodeGenFunction::EmitARCLoadWeakRetained().
|
static |
Definition at line 2447 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::EmitARCRetainAutoreleasedReturnValue(), and clang::CodeGen::CodeGenFunction::EmitARCRetainNonBlock().
Referenced by emitARCRetainCall().
|
static |
Given that the given expression is some sort of call (which does not return retained), emit a retain following it.
Definition at line 2442 of file CGObjC.cpp.
References emitARCRetainAfterCall(), and clang::CodeGen::CodeGenFunction::EmitScalarExpr().
Referenced by tryEmitARCRetainScalarExpr().
|
static |
Definition at line 2717 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::EmitARCRetain(), and tryEmitARCRetainLoadOfScalar().
Referenced by clang::CodeGen::CodeGenFunction::generateObjCGetterBody().
|
static |
Perform an operation having the following signature: i8* (i8**, i8*)
Definition at line 1867 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, createARCRuntimeFunction(), clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall(), getElementType(), clang::CodeGen::CodeGenTypeCache::Int8PtrPtrTy, and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitARCInitWeak(), and clang::CodeGen::CodeGenFunction::EmitARCStoreWeak().
|
static |
Perform an operation having the signature i8* (i8*) where a null input causes a no-op and returns null.
Definition at line 1812 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, createARCRuntimeFunction(), clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall(), and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitARCAutorelease(), clang::CodeGen::CodeGenFunction::EmitARCAutoreleaseReturnValue(), clang::CodeGen::CodeGenFunction::EmitARCRetainAutoreleasedReturnValue(), clang::CodeGen::CodeGenFunction::EmitARCRetainAutoreleaseNonBlock(), clang::CodeGen::CodeGenFunction::EmitARCRetainAutoreleaseReturnValue(), clang::CodeGen::CodeGenFunction::EmitARCRetainBlock(), and clang::CodeGen::CodeGenFunction::EmitARCRetainNonBlock().
|
static |
emitCPPObjectAtomicGetterCall - Call the runtime function to copy the ivar into the resturn slot.
Definition at line 802 of file CGObjC.cpp.
References clang::CodeGen::CallArgList::add(), clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionCall(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitLValueForIvar(), clang::CodeGen::RValue::get(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CGObjCRuntime::GetCppAtomicObjectGetFunction(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::CodeGenFunction::getTypes(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenFunction::LoadObjCSelf(), clang::CodeGen::CodeGenFunction::TypeOfSelfObject(), clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by clang::CodeGen::CodeGenFunction::generateObjCGetterBody().
|
static |
emitCPPObjectAtomicSetterCall - Call the runtime function to store the value from the first formal parameter into the given ivar, using the Cpp API for atomic Cpp objects with non-trivial copy assignment.
Definition at line 1044 of file CGObjC.cpp.
References clang::CodeGen::CallArgList::add(), clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionCall(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitLValue(), clang::CodeGen::CodeGenFunction::EmitLValueForIvar(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CGObjCRuntime::GetCppAtomicObjectSetFunction(), clang::QualType::getNonReferenceType(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenFunction::getTypes(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenFunction::LoadObjCSelf(), clang::ObjCMethodDecl::param_begin(), clang::CodeGen::CodeGenFunction::TypeOfSelfObject(), clang::VK_LValue, clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by clang::CodeGen::CodeGenFunction::generateObjCSetterBody().
|
static |
Definition at line 1337 of file CGObjC.cpp.
References clang::ObjCInterfaceDecl::all_declared_ivar_begin(), destroyARCStrongWithStore(), clang::QualType::DK_objc_strong_lifetime, clang::CodeGen::EHCleanup, clang::CodeGen::CodeGenFunction::EHStack, clang::ObjCImplDecl::getClassInterface(), clang::CodeGen::CodeGenFunction::getCleanupKind(), clang::CodeGen::CodeGenFunction::getDestroyer(), clang::ObjCIvarDecl::getNextIvar(), clang::QualType::isDestructedType(), clang::CodeGen::CodeGenFunction::LoadObjCSelf(), clang::CodeGen::CodeGenFunction::RunCleanupsScope::requiresCleanups(), and clang::ast_matchers::type.
Referenced by clang::CodeGen::CodeGenFunction::GenerateObjCCtorDtorMethod().
|
static |
emitStructGetterCall - Call the runtime function to load a property into the return value slot.
Definition at line 535 of file CGObjC.cpp.
References clang::CodeGen::CallArgList::add(), clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionCall(), clang::ASTContext::BoolTy, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, Context, clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitLValueForIvar(), clang::CodeGen::RValue::get(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CGObjCRuntime::GetGetStructFunction(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::CodeGenModule::getSize(), clang::ASTContext::getSizeType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenFunction::getTypes(), clang::ASTContext::getTypeSizeInChars(), clang::CodeGen::CodeGenFunction::LoadObjCSelf(), clang::CodeGen::CodeGenFunction::ReturnValue, clang::CodeGen::CodeGenFunction::TypeOfSelfObject(), clang::CodeGen::CodeGenTypeCache::VoidPtrTy, clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by clang::CodeGen::CodeGenFunction::generateObjCGetterBody().
|
static |
emitStructSetterCall - Call the runtime function to store the value from the first formal parameter into the given ivar.
Definition at line 1000 of file CGObjC.cpp.
References clang::CodeGen::CallArgList::add(), clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionCall(), clang::ASTContext::BoolTy, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenFunction::EmitLValue(), clang::CodeGen::CodeGenFunction::EmitLValueForIvar(), clang::CodeGen::RValue::get(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenFunction::getContext(), clang::QualType::getNonReferenceType(), clang::CodeGen::CodeGenModule::getObjCRuntime(), clang::CodeGen::CGObjCRuntime::GetSetStructFunction(), clang::CodeGen::CodeGenModule::getSize(), clang::ASTContext::getSizeType(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenFunction::getTypes(), clang::ASTContext::getTypeSizeInChars(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenFunction::LoadObjCSelf(), clang::ObjCMethodDecl::param_begin(), clang::CodeGen::CodeGenFunction::TypeOfSelfObject(), clang::VK_LValue, clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.
Referenced by clang::CodeGen::CodeGenFunction::generateObjCSetterBody().
|
static |
Return the maximum size that permits atomic accesses for the given architecture.
Definition at line 576 of file CGObjC.cpp.
References clang::CharUnits::fromQuantity(), and clang::CodeGen::CodeGenTypeCache::PointerSizeInBytes.
|
static |
Given the address of a variable of pointer type, find the correct null to store into it.
Definition at line 40 of file CGObjC.cpp.
References getElementType(), and clang::ast_matchers::type.
Referenced by destroyARCStrongWithStore(), clang::CodeGen::CodeGenFunction::EmitObjCMessageExpr(), and tryEmitARCRetainLoadOfScalar().
|
static |
Definition at line 777 of file CGObjC.cpp.
References clang::construct, clang::ObjCPropertyImplDecl::getGetterCXXConstructor(), and clang::Expr::isGLValue().
Referenced by clang::CodeGen::CodeGenFunction::GenerateObjCAtomicGetterCopyHelperFunction(), and clang::CodeGen::CodeGenFunction::generateObjCGetterBody().
|
static |
Definition at line 1080 of file CGObjC.cpp.
References clang::ObjCPropertyImplDecl::getSetterCXXAssignment().
Referenced by clang::CodeGen::CodeGenFunction::GenerateObjCAtomicSetterCopyHelperFunction(), and clang::CodeGen::CodeGenFunction::generateObjCSetterBody().
|
static |
Determine whether the given architecture supports unaligned atomic accesses. They don't have to be fast, just faster than a function call and a mutex.
Definition at line 568 of file CGObjC.cpp.
Determine whether it might be important to emit a separate objc_retain_block on the result of the given expression, or whether it's okay to just emit it in a +1 context.
Definition at line 2489 of file CGObjC.cpp.
References clang::CK_AnyPointerToBlockPointerCast, clang::CK_ARCConsumeObject, clang::CK_ARCProduceObject, clang::CK_ARCReclaimReturnedObject, clang::CK_BitCast, clang::CK_LValueToRValue, clang::CK_NoOp, clang::Expr::getType(), clang::Expr::IgnoreParens(), and clang::Type::isBlockPointerType().
Referenced by clang::CodeGen::CodeGenFunction::EmitARCExtendBlockObject(), and tryEmitARCRetainScalarExpr().
|
static |
Decide whether to extend the lifetime of the receiver of a returns-inner-pointer message.
Definition at line 271 of file CGObjC.cpp.
References clang::CK_LValueToRValue, clang::ObjCMessageExpr::Class, clang::CastExpr::getCastKind(), clang::DeclRefExpr::getDecl(), clang::ObjCMessageExpr::getInstanceReceiver(), clang::QualType::getObjCLifetime(), clang::ObjCMessageExpr::getReceiverKind(), clang::CastExpr::getSubExpr(), clang::Expr::getType(), clang::Decl::hasAttr(), clang::VarDecl::hasLocalStorage(), clang::Expr::IgnoreParens(), clang::ObjCMessageExpr::Instance, clang::Qualifiers::OCL_Strong, clang::ObjCMessageExpr::SuperClass, and clang::ObjCMessageExpr::SuperInstance.
Referenced by clang::CodeGen::CodeGenFunction::EmitObjCMessageExpr().
|
static |
Definition at line 2380 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::EmitARCLoadWeakRetained(), clang::CodeGen::CodeGenFunction::EmitLoadOfLValue(), clang::CodeGen::LValue::getAddress(), clang::QualType::getObjCLifetime(), clang::CodeGen::RValue::getScalarVal(), clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, and clang::Qualifiers::OCL_Weak.
Referenced by emitARCRetainLoadOfScalar(), tryEmitARCRetainLoadOfScalar(), and tryEmitARCRetainScalarExpr().
|
static |
Definition at line 2400 of file CGObjC.cpp.
References clang::BO_Assign, clang::CodeGen::CodeGenFunction::EmitLoadOfLValue(), clang::CodeGen::CodeGenFunction::EmitLValue(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::CodeGen::CodeGenFunction::EmitStoreOfScalar(), clang::CodeGen::LValue::getAddress(), clang::CodeGen::CodeGenFunction::getLangOpts(), getNullForVariable(), clang::QualType::getObjCLifetime(), clang::CodeGen::RValue::getScalarVal(), clang::Expr::getType(), clang::Expr::IgnoreParens(), clang::QualType::isConstQualified(), clang::QualType::isVolatileQualified(), clang::Expr::isXValue(), clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, tryEmitARCRetainLoadOfScalar(), and clang::ast_matchers::type.
|
static |
Try to emit a PseudoObjectExpr at +1.
This massively duplicates emitPseudoObjectRValue.
Definition at line 2525 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(), clang::CodeGen::RValue::get(), clang::PseudoObjectExpr::getResultExpr(), clang::PseudoObjectExpr::semantics_begin(), clang::PseudoObjectExpr::semantics_end(), and tryEmitARCRetainScalarExpr().
Referenced by tryEmitARCRetainScalarExpr().
|
static |
Definition at line 2576 of file CGObjC.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CK_AnyPointerToBlockPointerCast, clang::CK_ARCConsumeObject, clang::CK_ARCExtendBlockObject, clang::CK_ARCReclaimReturnedObject, clang::CK_BitCast, clang::CK_BlockPointerToObjCPointerCast, clang::CK_CPointerToObjCPointerCast, clang::CK_LValueToRValue, clang::CK_NoOp, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CodeGenFunction::EmitARCRetainBlock(), emitARCRetainCall(), clang::CodeGen::CodeGenFunction::EmitScalarExpr(), clang::Expr::getType(), clang::Type::hasPointerRepresentation(), clang::Expr::IgnoreParens(), shouldEmitSeparateBlockRetain(), tryEmitARCRetainLoadOfScalar(), tryEmitARCRetainPseudoObject(), and clang::UO_Extension.
Referenced by clang::CodeGen::CodeGenFunction::EmitARCExtendBlockObject(), clang::CodeGen::CodeGenFunction::EmitARCRetainAutoreleaseScalarExpr(), clang::CodeGen::CodeGenFunction::EmitARCRetainScalarExpr(), clang::CodeGen::CodeGenFunction::EmitARCStoreStrong(), clang::CodeGen::CodeGenFunction::EmitObjCMessageExpr(), and tryEmitARCRetainPseudoObject().
|
static |
Definition at line 1104 of file CGObjC.cpp.
References clang::CodeGen::CodeGenModule::getLangOpts(), clang::ObjCRuntime::hasOptimizedSetter(), clang::LangOptions::NonGC, and clang::LangOptions::ObjCRuntime.
Referenced by clang::CodeGen::CodeGenFunction::generateObjCSetterBody().