clang 20.0.0git
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
clang::CodeGen::CGObjCRuntime Class Referenceabstract

Implements runtime-specific code generation functions. More...

#include "/home/buildbot/as-worker-4/publish-doxygen-docs/llvm-project/clang/lib/CodeGen/CGObjCRuntime.h"

Classes

struct  MessageSendInfo
 

Public Member Functions

virtual ~CGObjCRuntime ()
 
std::string getSymbolNameForMethod (const ObjCMethodDecl *method, bool includeCategoryName=true)
 
virtual llvm::Function * ModuleInitFunction ()=0
 Generate the function required to register all Objective-C components in this compilation unit with the runtime library.
 
virtual llvm::Value * GetSelector (CodeGenFunction &CGF, Selector Sel)=0
 Get a selector for the specified name and type values.
 
virtual Address GetAddrOfSelector (CodeGenFunction &CGF, Selector Sel)=0
 Get the address of a selector for the specified name and type values.
 
virtual llvm::Value * GetSelector (CodeGenFunction &CGF, const ObjCMethodDecl *Method)=0
 Get a typed selector.
 
virtual llvm::Constant * GetEHType (QualType T)=0
 Get the type constant to catch for the given ObjC pointer type.
 
virtual CatchTypeInfo getCatchAllTypeInfo ()
 
virtual ConstantAddress GenerateConstantString (const StringLiteral *)=0
 Generate a constant string object.
 
virtual void GenerateCategory (const ObjCCategoryImplDecl *OCD)=0
 Generate a category.
 
virtual void GenerateClass (const ObjCImplementationDecl *OID)=0
 Generate a class structure for this class.
 
virtual void RegisterAlias (const ObjCCompatibleAliasDecl *OAD)=0
 Register an class alias.
 
virtual CodeGen::RValue GenerateMessageSend (CodeGen::CodeGenFunction &CGF, ReturnValueSlot ReturnSlot, QualType ResultType, Selector Sel, llvm::Value *Receiver, const CallArgList &CallArgs, const ObjCInterfaceDecl *Class=nullptr, const ObjCMethodDecl *Method=nullptr)=0
 Generate an Objective-C message send operation.
 
CodeGen::RValue GeneratePossiblySpecializedMessageSend (CodeGenFunction &CGF, ReturnValueSlot Return, QualType ResultType, Selector Sel, llvm::Value *Receiver, const CallArgList &Args, const ObjCInterfaceDecl *OID, const ObjCMethodDecl *Method, bool isClassMessage)
 Generate an Objective-C message send operation.
 
virtual CodeGen::RValue GenerateMessageSendSuper (CodeGen::CodeGenFunction &CGF, ReturnValueSlot ReturnSlot, QualType ResultType, Selector Sel, const ObjCInterfaceDecl *Class, bool isCategoryImpl, llvm::Value *Self, bool IsClassMessage, const CallArgList &CallArgs, const ObjCMethodDecl *Method=nullptr)=0
 Generate an Objective-C message send operation to the super class initiated in a method for Class and with the given Self object.
 
std::vector< const ObjCProtocolDecl * > GetRuntimeProtocolList (ObjCProtocolDecl::protocol_iterator begin, ObjCProtocolDecl::protocol_iterator end)
 Walk the list of protocol references from a class, category or protocol to traverse the DAG formed from it's inheritance hierarchy.
 
virtual llvm::Value * GenerateProtocolRef (CodeGenFunction &CGF, const ObjCProtocolDecl *OPD)=0
 Emit the code to return the named protocol as an object, as in a @protocol expression.
 
virtual void GenerateProtocol (const ObjCProtocolDecl *OPD)=0
 Generate the named protocol.
 
virtual llvm::Constant * GetOrEmitProtocol (const ObjCProtocolDecl *PD)=0
 GetOrEmitProtocol - Get the protocol object for the given declaration, emitting it if necessary.
 
virtual llvm::Function * GenerateMethod (const ObjCMethodDecl *OMD, const ObjCContainerDecl *CD)=0
 Generate a function preamble for a method with the specified types.
 
virtual void GenerateDirectMethodPrologue (CodeGenFunction &CGF, llvm::Function *Fn, const ObjCMethodDecl *OMD, const ObjCContainerDecl *CD)=0
 Generates prologue for direct Objective-C Methods.
 
virtual llvm::FunctionCallee GetPropertyGetFunction ()=0
 Return the runtime function for getting properties.
 
virtual llvm::FunctionCallee GetPropertySetFunction ()=0
 Return the runtime function for setting properties.
 
virtual llvm::FunctionCallee GetOptimizedPropertySetFunction (bool atomic, bool copy)=0
 Return the runtime function for optimized setting properties.
 
virtual llvm::FunctionCallee GetGetStructFunction ()=0
 
virtual llvm::FunctionCallee GetSetStructFunction ()=0
 
virtual llvm::FunctionCallee GetCppAtomicObjectSetFunction ()=0
 API for atomic copying of qualified aggregates with non-trivial copy assignment (c++) in setter.
 
virtual llvm::FunctionCallee GetCppAtomicObjectGetFunction ()=0
 API for atomic copying of qualified aggregates with non-trivial copy assignment (c++) in getter.
 
virtual llvm::Value * GetClass (CodeGenFunction &CGF, const ObjCInterfaceDecl *OID)=0
 GetClass - Return a reference to the class for the given interface decl.
 
virtual llvm::Value * EmitNSAutoreleasePoolClassRef (CodeGenFunction &CGF)
 
virtual llvm::FunctionCallee EnumerationMutationFunction ()=0
 EnumerationMutationFunction - Return the function that's called by the compiler when a mutation is detected during foreach iteration.
 
virtual void EmitSynchronizedStmt (CodeGen::CodeGenFunction &CGF, const ObjCAtSynchronizedStmt &S)=0
 
virtual void EmitTryStmt (CodeGen::CodeGenFunction &CGF, const ObjCAtTryStmt &S)=0
 
virtual void EmitThrowStmt (CodeGen::CodeGenFunction &CGF, const ObjCAtThrowStmt &S, bool ClearInsertionPoint=true)=0
 
virtual llvm::Value * EmitObjCWeakRead (CodeGen::CodeGenFunction &CGF, Address AddrWeakObj)=0
 
virtual void EmitObjCWeakAssign (CodeGen::CodeGenFunction &CGF, llvm::Value *src, Address dest)=0
 
virtual void EmitObjCGlobalAssign (CodeGen::CodeGenFunction &CGF, llvm::Value *src, Address dest, bool threadlocal=false)=0
 
virtual void EmitObjCIvarAssign (CodeGen::CodeGenFunction &CGF, llvm::Value *src, Address dest, llvm::Value *ivarOffset)=0
 
virtual void EmitObjCStrongCastAssign (CodeGen::CodeGenFunction &CGF, llvm::Value *src, Address dest)=0
 
virtual LValue EmitObjCValueForIvar (CodeGen::CodeGenFunction &CGF, QualType ObjectTy, llvm::Value *BaseValue, const ObjCIvarDecl *Ivar, unsigned CVRQualifiers)=0
 
virtual llvm::Value * EmitIvarOffset (CodeGen::CodeGenFunction &CGF, const ObjCInterfaceDecl *Interface, const ObjCIvarDecl *Ivar)=0
 
virtual void EmitGCMemmoveCollectable (CodeGen::CodeGenFunction &CGF, Address DestPtr, Address SrcPtr, llvm::Value *Size)=0
 
virtual llvm::Constant * BuildGCBlockLayout (CodeGen::CodeGenModule &CGM, const CodeGen::CGBlockInfo &blockInfo)=0
 
virtual llvm::Constant * BuildRCBlockLayout (CodeGen::CodeGenModule &CGM, const CodeGen::CGBlockInfo &blockInfo)=0
 
virtual std::string getRCBlockLayoutStr (CodeGen::CodeGenModule &CGM, const CGBlockInfo &blockInfo)
 
virtual llvm::Constant * BuildByrefLayout (CodeGen::CodeGenModule &CGM, QualType T)=0
 Returns an i8* which points to the byref layout information.
 
MessageSendInfo getMessageSendInfo (const ObjCMethodDecl *method, QualType resultType, CallArgList &callArgs)
 Compute the pointer-to-function type to which a message send should be casted in order to correctly call the given method with the given arguments.
 
bool canMessageReceiverBeNull (CodeGenFunction &CGF, const ObjCMethodDecl *method, bool isSuper, const ObjCInterfaceDecl *classReceiver, llvm::Value *receiver)
 
unsigned ComputeBitfieldBitOffset (CodeGen::CodeGenModule &CGM, const ObjCInterfaceDecl *ID, const ObjCIvarDecl *Ivar)
 

Static Public Member Functions

static bool isWeakLinkedClass (const ObjCInterfaceDecl *cls)
 
static void destroyCalleeDestroyedArguments (CodeGenFunction &CGF, const ObjCMethodDecl *method, const CallArgList &callArgs)
 Destroy the callee-destroyed arguments of the given method, if it has any.
 

Protected Member Functions

 CGObjCRuntime (CodeGen::CodeGenModule &CGM)
 
uint64_t ComputeIvarBaseOffset (CodeGen::CodeGenModule &CGM, const ObjCInterfaceDecl *OID, const ObjCIvarDecl *Ivar)
 Compute an offset to the given ivar, suitable for passing to EmitValueForIvarAtOffset.
 
uint64_t ComputeIvarBaseOffset (CodeGen::CodeGenModule &CGM, const ObjCImplementationDecl *OID, const ObjCIvarDecl *Ivar)
 
LValue EmitValueForIvarAtOffset (CodeGen::CodeGenFunction &CGF, const ObjCInterfaceDecl *OID, llvm::Value *BaseValue, const ObjCIvarDecl *Ivar, unsigned CVRQualifiers, llvm::Value *Offset)
 
void EmitTryCatchStmt (CodeGenFunction &CGF, const ObjCAtTryStmt &S, llvm::FunctionCallee beginCatchFn, llvm::FunctionCallee endCatchFn, llvm::FunctionCallee exceptionRethrowFn)
 Emits a try / catch statement.
 
void EmitInitOfCatchParam (CodeGenFunction &CGF, llvm::Value *exn, const VarDecl *paramDecl)
 
void EmitAtSynchronizedStmt (CodeGenFunction &CGF, const ObjCAtSynchronizedStmt &S, llvm::FunctionCallee syncEnterFn, llvm::FunctionCallee syncExitFn)
 Emits an @synchronize() statement, using the syncEnterFn and syncExitFn arguments as the functions called to lock and unlock the object.
 

Protected Attributes

CodeGen::CodeGenModuleCGM
 

Detailed Description

Implements runtime-specific code generation functions.

Definition at line 65 of file CGObjCRuntime.h.

Constructor & Destructor Documentation

◆ CGObjCRuntime()

clang::CodeGen::CGObjCRuntime::CGObjCRuntime ( CodeGen::CodeGenModule CGM)
inlineprotected

Definition at line 68 of file CGObjCRuntime.h.

◆ ~CGObjCRuntime()

CGObjCRuntime::~CGObjCRuntime ( )
virtual

Definition at line 4084 of file CGObjC.cpp.

Member Function Documentation

◆ BuildByrefLayout()

virtual llvm::Constant * clang::CodeGen::CGObjCRuntime::BuildByrefLayout ( CodeGen::CodeGenModule CGM,
QualType  T 
)
pure virtual

Returns an i8* which points to the byref layout information.

◆ BuildGCBlockLayout()

virtual llvm::Constant * clang::CodeGen::CGObjCRuntime::BuildGCBlockLayout ( CodeGen::CodeGenModule CGM,
const CodeGen::CGBlockInfo blockInfo 
)
pure virtual

Referenced by buildBlockDescriptor().

◆ BuildRCBlockLayout()

virtual llvm::Constant * clang::CodeGen::CGObjCRuntime::BuildRCBlockLayout ( CodeGen::CodeGenModule CGM,
const CodeGen::CGBlockInfo blockInfo 
)
pure virtual

Referenced by buildBlockDescriptor().

◆ canMessageReceiverBeNull()

bool CGObjCRuntime::canMessageReceiverBeNull ( CodeGenFunction CGF,
const ObjCMethodDecl method,
bool  isSuper,
const ObjCInterfaceDecl classReceiver,
llvm::Value *  receiver 
)

◆ ComputeBitfieldBitOffset()

unsigned CGObjCRuntime::ComputeBitfieldBitOffset ( CodeGen::CodeGenModule CGM,
const ObjCInterfaceDecl ID,
const ObjCIvarDecl Ivar 
)

◆ ComputeIvarBaseOffset() [1/2]

uint64_t CGObjCRuntime::ComputeIvarBaseOffset ( CodeGen::CodeGenModule CGM,
const ObjCImplementationDecl OID,
const ObjCIvarDecl Ivar 
)
protected

◆ ComputeIvarBaseOffset() [2/2]

uint64_t CGObjCRuntime::ComputeIvarBaseOffset ( CodeGen::CodeGenModule CGM,
const ObjCInterfaceDecl OID,
const ObjCIvarDecl Ivar 
)
protected

Compute an offset to the given ivar, suitable for passing to EmitValueForIvarAtOffset.

Note that the correct handling of bit-fields is carefully coordinated by these two, use caution!

The latter overload is suitable for computing the offset of a sythesized ivar.

Definition at line 31 of file CGObjCRuntime.cpp.

References CGM, clang::ASTContext::getCharWidth(), clang::CodeGen::CodeGenModule::getContext(), and clang::ASTContext::lookupFieldBitOffset().

◆ destroyCalleeDestroyedArguments()

void CGObjCRuntime::destroyCalleeDestroyedArguments ( CodeGenFunction CGF,
const ObjCMethodDecl method,
const CallArgList callArgs 
)
static

◆ EmitAtSynchronizedStmt()

void CGObjCRuntime::EmitAtSynchronizedStmt ( CodeGenFunction CGF,
const ObjCAtSynchronizedStmt S,
llvm::FunctionCallee  syncEnterFn,
llvm::FunctionCallee  syncExitFn 
)
protected

◆ EmitGCMemmoveCollectable()

virtual void clang::CodeGen::CGObjCRuntime::EmitGCMemmoveCollectable ( CodeGen::CodeGenFunction CGF,
Address  DestPtr,
Address  SrcPtr,
llvm::Value *  Size 
)
pure virtual

◆ EmitInitOfCatchParam()

void CGObjCRuntime::EmitInitOfCatchParam ( CodeGenFunction CGF,
llvm::Value *  exn,
const VarDecl paramDecl 
)
protected

◆ EmitIvarOffset()

virtual llvm::Value * clang::CodeGen::CGObjCRuntime::EmitIvarOffset ( CodeGen::CodeGenFunction CGF,
const ObjCInterfaceDecl Interface,
const ObjCIvarDecl Ivar 
)
pure virtual

◆ EmitNSAutoreleasePoolClassRef()

virtual llvm::Value * clang::CodeGen::CGObjCRuntime::EmitNSAutoreleasePoolClassRef ( CodeGenFunction CGF)
inlinevirtual

Definition at line 276 of file CGObjCRuntime.h.

◆ EmitObjCGlobalAssign()

virtual void clang::CodeGen::CGObjCRuntime::EmitObjCGlobalAssign ( CodeGen::CodeGenFunction CGF,
llvm::Value *  src,
Address  dest,
bool  threadlocal = false 
)
pure virtual

Referenced by EmitDeclInit().

◆ EmitObjCIvarAssign()

virtual void clang::CodeGen::CGObjCRuntime::EmitObjCIvarAssign ( CodeGen::CodeGenFunction CGF,
llvm::Value *  src,
Address  dest,
llvm::Value *  ivarOffset 
)
pure virtual

◆ EmitObjCStrongCastAssign()

virtual void clang::CodeGen::CGObjCRuntime::EmitObjCStrongCastAssign ( CodeGen::CodeGenFunction CGF,
llvm::Value *  src,
Address  dest 
)
pure virtual

◆ EmitObjCValueForIvar()

virtual LValue clang::CodeGen::CGObjCRuntime::EmitObjCValueForIvar ( CodeGen::CodeGenFunction CGF,
QualType  ObjectTy,
llvm::Value *  BaseValue,
const ObjCIvarDecl Ivar,
unsigned  CVRQualifiers 
)
pure virtual

◆ EmitObjCWeakAssign()

virtual void clang::CodeGen::CGObjCRuntime::EmitObjCWeakAssign ( CodeGen::CodeGenFunction CGF,
llvm::Value *  src,
Address  dest 
)
pure virtual

Referenced by EmitDeclInit().

◆ EmitObjCWeakRead()

virtual llvm::Value * clang::CodeGen::CGObjCRuntime::EmitObjCWeakRead ( CodeGen::CodeGenFunction CGF,
Address  AddrWeakObj 
)
pure virtual

◆ EmitSynchronizedStmt()

virtual void clang::CodeGen::CGObjCRuntime::EmitSynchronizedStmt ( CodeGen::CodeGenFunction CGF,
const ObjCAtSynchronizedStmt S 
)
pure virtual

◆ EmitThrowStmt()

virtual void clang::CodeGen::CGObjCRuntime::EmitThrowStmt ( CodeGen::CodeGenFunction CGF,
const ObjCAtThrowStmt S,
bool  ClearInsertionPoint = true 
)
pure virtual

◆ EmitTryCatchStmt()

void CGObjCRuntime::EmitTryCatchStmt ( CodeGenFunction CGF,
const ObjCAtTryStmt S,
llvm::FunctionCallee  beginCatchFn,
llvm::FunctionCallee  endCatchFn,
llvm::FunctionCallee  exceptionRethrowFn 
)
protected

Emits a try / catch statement.

This function is intended to be called by subclasses, and provides a generic mechanism for generating these, which should be usable by all runtimes. The caller must provide the functions to call when entering and exiting a @catch() block, and the function used to rethrow exceptions. If the begin and end catch functions are NULL, then the function assumes that the EH personality function provides the thrown object directly.

Definition at line 142 of file CGObjCRuntime.cpp.

References clang::CodeGen::CodeGenFunction::Builder, CGM, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CodeGenFunction::CurFn, clang::CodeGen::CodeGenFunction::CurFuncDecl, clang::CodeGen::CodeGenFunction::CurrentFuncletPad, clang::CodeGen::CodeGenFunction::CurSEHParent, E, clang::CodeGen::CodeGenFunction::EHStack, clang::CodeGen::CodeGenFunction::EmitAutoVarDecl(), clang::CodeGen::CodeGenFunction::EmitBlock(), clang::CodeGen::CodeGenFunction::EmitBranchThroughCleanup(), EmitInitOfCatchParam(), clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall(), clang::CodeGen::Address::emitRawPointer(), clang::CodeGen::CodeGenFunction::EmitStmt(), clang::CodeGen::CodeGenFunction::FinallyInfo::enter(), clang::CodeGen::CodeGenFunction::FinallyInfo::exit(), clang::CodeGen::CodeGenFunction::FinishFunction(), clang::CodeGen::CodeGenFunction::LexicalScope::ForceCleanup(), clang::CodeGen::EHPersonality::get(), clang::CodeGen::CodeGenFunction::JumpDest::getBlock(), getCatchAllTypeInfo(), GetEHType(), clang::Stmt::getEndLoc(), clang::CodeGen::CodeGenFunction::getExceptionFromSlot(), clang::CodeGen::CodeGenFunction::getExceptionSlot(), clang::CodeGen::CodeGenFunction::getJumpDestInCurrentScope(), clang::ValueDecl::getType(), clang::CodeGen::CodeGenFunction::JumpDest::isValid(), clang::CodeGen::NormalAndEHCleanup, clang::CodeGen::NormalCleanup, clang::CodeGen::CodeGenFunction::ObjCEHValueStack, clang::CodeGen::CodeGenFunction::popCatchScope(), clang::CodeGen::EHScopeStack::pushCatch(), clang::CodeGen::CodeGenFunction::pushSEHCleanup(), clang::CodeGen::EHCatchScope::setHandler(), clang::CodeGen::CodeGenFunction::startOutlinedSEHHelper(), and clang::CodeGen::EHPersonality::usesFuncletPads().

◆ EmitTryStmt()

virtual void clang::CodeGen::CGObjCRuntime::EmitTryStmt ( CodeGen::CodeGenFunction CGF,
const ObjCAtTryStmt S 
)
pure virtual

◆ EmitValueForIvarAtOffset()

LValue CGObjCRuntime::EmitValueForIvarAtOffset ( CodeGen::CodeGenFunction CGF,
const ObjCInterfaceDecl OID,
llvm::Value *  BaseValue,
const ObjCIvarDecl Ivar,
unsigned  CVRQualifiers,
llvm::Value *  Offset 
)
protected

◆ EnumerationMutationFunction()

virtual llvm::FunctionCallee clang::CodeGen::CGObjCRuntime::EnumerationMutationFunction ( )
pure virtual

EnumerationMutationFunction - Return the function that's called by the compiler when a mutation is detected during foreach iteration.

◆ GenerateCategory()

virtual void clang::CodeGen::CGObjCRuntime::GenerateCategory ( const ObjCCategoryImplDecl OCD)
pure virtual

Generate a category.

A category contains a list of methods (and accompanying metadata) and a list of protocols.

◆ GenerateClass()

virtual void clang::CodeGen::CGObjCRuntime::GenerateClass ( const ObjCImplementationDecl OID)
pure virtual

Generate a class structure for this class.

◆ GenerateConstantString()

virtual ConstantAddress clang::CodeGen::CGObjCRuntime::GenerateConstantString ( const StringLiteral )
pure virtual

Generate a constant string object.

Referenced by emitConstantObjCStringLiteral().

◆ GenerateDirectMethodPrologue()

virtual void clang::CodeGen::CGObjCRuntime::GenerateDirectMethodPrologue ( CodeGenFunction CGF,
llvm::Function *  Fn,
const ObjCMethodDecl OMD,
const ObjCContainerDecl CD 
)
pure virtual

Generates prologue for direct Objective-C Methods.

◆ GenerateMessageSend()

virtual CodeGen::RValue clang::CodeGen::CGObjCRuntime::GenerateMessageSend ( CodeGen::CodeGenFunction CGF,
ReturnValueSlot  ReturnSlot,
QualType  ResultType,
Selector  Sel,
llvm::Value *  Receiver,
const CallArgList CallArgs,
const ObjCInterfaceDecl Class = nullptr,
const ObjCMethodDecl Method = nullptr 
)
pure virtual

Generate an Objective-C message send operation.

Parameters
Method- The method being called, this may be null if synthesizing a property setter or getter.

Referenced by GeneratePossiblySpecializedMessageSend().

◆ GenerateMessageSendSuper()

virtual CodeGen::RValue clang::CodeGen::CGObjCRuntime::GenerateMessageSendSuper ( CodeGen::CodeGenFunction CGF,
ReturnValueSlot  ReturnSlot,
QualType  ResultType,
Selector  Sel,
const ObjCInterfaceDecl Class,
bool  isCategoryImpl,
llvm::Value *  Self,
bool  IsClassMessage,
const CallArgList CallArgs,
const ObjCMethodDecl Method = nullptr 
)
pure virtual

Generate an Objective-C message send operation to the super class initiated in a method for Class and with the given Self object.

Parameters
Method- The method being called, this may be null if synthesizing a property setter or getter.

◆ GenerateMethod()

virtual llvm::Function * clang::CodeGen::CGObjCRuntime::GenerateMethod ( const ObjCMethodDecl OMD,
const ObjCContainerDecl CD 
)
pure virtual

Generate a function preamble for a method with the specified types.

◆ GeneratePossiblySpecializedMessageSend()

CodeGen::RValue CGObjCRuntime::GeneratePossiblySpecializedMessageSend ( CodeGenFunction CGF,
ReturnValueSlot  Return,
QualType  ResultType,
Selector  Sel,
llvm::Value *  Receiver,
const CallArgList Args,
const ObjCInterfaceDecl OID,
const ObjCMethodDecl Method,
bool  isClassMessage 
)

Generate an Objective-C message send operation.

This variant allows for the call to be substituted with an optimized variant.

Definition at line 438 of file CGObjC.cpp.

References GenerateMessageSend(), clang::CodeGen::RValue::get(), and tryGenerateSpecializedMessageSend().

◆ GenerateProtocol()

virtual void clang::CodeGen::CGObjCRuntime::GenerateProtocol ( const ObjCProtocolDecl OPD)
pure virtual

Generate the named protocol.

Protocols contain method metadata but no implementations.

◆ GenerateProtocolRef()

virtual llvm::Value * clang::CodeGen::CGObjCRuntime::GenerateProtocolRef ( CodeGenFunction CGF,
const ObjCProtocolDecl OPD 
)
pure virtual

Emit the code to return the named protocol as an object, as in a @protocol expression.

◆ GetAddrOfSelector()

virtual Address clang::CodeGen::CGObjCRuntime::GetAddrOfSelector ( CodeGenFunction CGF,
Selector  Sel 
)
pure virtual

Get the address of a selector for the specified name and type values.

This is a rarely-used language extension, but sadly it exists.

The result should have the LLVM type for a pointer to ASTContext::getObjCSelType().

◆ getCatchAllTypeInfo()

virtual CatchTypeInfo clang::CodeGen::CGObjCRuntime::getCatchAllTypeInfo ( )
inlinevirtual

Definition at line 148 of file CGObjCRuntime.h.

Referenced by EmitTryCatchStmt().

◆ GetClass()

virtual llvm::Value * clang::CodeGen::CGObjCRuntime::GetClass ( CodeGenFunction CGF,
const ObjCInterfaceDecl OID 
)
pure virtual

GetClass - Return a reference to the class for the given interface decl.

Referenced by tryEmitSpecializedAllocInit().

◆ GetCppAtomicObjectGetFunction()

virtual llvm::FunctionCallee clang::CodeGen::CGObjCRuntime::GetCppAtomicObjectGetFunction ( )
pure virtual

API for atomic copying of qualified aggregates with non-trivial copy assignment (c++) in getter.

Referenced by emitCPPObjectAtomicGetterCall().

◆ GetCppAtomicObjectSetFunction()

virtual llvm::FunctionCallee clang::CodeGen::CGObjCRuntime::GetCppAtomicObjectSetFunction ( )
pure virtual

API for atomic copying of qualified aggregates with non-trivial copy assignment (c++) in setter.

Referenced by emitCPPObjectAtomicSetterCall().

◆ GetEHType()

virtual llvm::Constant * clang::CodeGen::CGObjCRuntime::GetEHType ( QualType  T)
pure virtual

Get the type constant to catch for the given ObjC pointer type.

This is used externally to implement catching ObjC types in C++. Runtimes which don't support this should add the appropriate error to Sema.

Referenced by EmitTryCatchStmt().

◆ GetGetStructFunction()

virtual llvm::FunctionCallee clang::CodeGen::CGObjCRuntime::GetGetStructFunction ( )
pure virtual

Referenced by emitStructGetterCall().

◆ getMessageSendInfo()

CGObjCRuntime::MessageSendInfo CGObjCRuntime::getMessageSendInfo ( const ObjCMethodDecl method,
QualType  resultType,
CallArgList callArgs 
)

Compute the pointer-to-function type to which a message send should be casted in order to correctly call the given method with the given arguments.

Parameters
method- may be null
resultType- the result type to use if there's no method
callArgs- the actual arguments, including implicit ones

Definition at line 360 of file CGObjCRuntime.cpp.

References clang::CodeGen::CodeGenTypes::arrangeCall(), clang::CodeGen::CodeGenTypes::arrangeObjCMessageSendSignature(), clang::CodeGen::CodeGenTypes::arrangeUnprototypedObjCMessageSend(), CGM, clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::CodeGenModule::getLLVMContext(), and clang::CodeGen::CodeGenModule::getTypes().

◆ GetOptimizedPropertySetFunction()

virtual llvm::FunctionCallee clang::CodeGen::CGObjCRuntime::GetOptimizedPropertySetFunction ( bool  atomic,
bool  copy 
)
pure virtual

Return the runtime function for optimized setting properties.

◆ GetOrEmitProtocol()

virtual llvm::Constant * clang::CodeGen::CGObjCRuntime::GetOrEmitProtocol ( const ObjCProtocolDecl PD)
pure virtual

GetOrEmitProtocol - Get the protocol object for the given declaration, emitting it if necessary.

The return value has type ProtocolPtrTy.

Referenced by clang::CodeGen::emitObjCProtocolObject().

◆ GetPropertyGetFunction()

virtual llvm::FunctionCallee clang::CodeGen::CGObjCRuntime::GetPropertyGetFunction ( )
pure virtual

Return the runtime function for getting properties.

◆ GetPropertySetFunction()

virtual llvm::FunctionCallee clang::CodeGen::CGObjCRuntime::GetPropertySetFunction ( )
pure virtual

Return the runtime function for setting properties.

◆ getRCBlockLayoutStr()

virtual std::string clang::CodeGen::CGObjCRuntime::getRCBlockLayoutStr ( CodeGen::CodeGenModule CGM,
const CGBlockInfo blockInfo 
)
inlinevirtual

Definition at line 320 of file CGObjCRuntime.h.

Referenced by getBlockDescriptorName().

◆ GetRuntimeProtocolList()

std::vector< const ObjCProtocolDecl * > CGObjCRuntime::GetRuntimeProtocolList ( ObjCProtocolDecl::protocol_iterator  begin,
ObjCProtocolDecl::protocol_iterator  end 
)

Walk the list of protocol references from a class, category or protocol to traverse the DAG formed from it's inheritance hierarchy.

Find the list of protocols that ends each walk at either a runtime protocol or a non-runtime protocol with no parents. For the common case of just a list of standard runtime protocols this just returns the same list that was passed in.

Definition at line 466 of file CGObjC.cpp.

References AppendFirstImpliedRuntimeProtocols().

◆ GetSelector() [1/2]

virtual llvm::Value * clang::CodeGen::CGObjCRuntime::GetSelector ( CodeGenFunction CGF,
const ObjCMethodDecl Method 
)
pure virtual

Get a typed selector.

◆ GetSelector() [2/2]

virtual llvm::Value * clang::CodeGen::CGObjCRuntime::GetSelector ( CodeGenFunction CGF,
Selector  Sel 
)
pure virtual

Get a selector for the specified name and type values.

The result should have the LLVM type for ASTContext::getObjCSelType().

◆ GetSetStructFunction()

virtual llvm::FunctionCallee clang::CodeGen::CGObjCRuntime::GetSetStructFunction ( )
pure virtual

Referenced by emitStructSetterCall().

◆ getSymbolNameForMethod()

std::string CGObjCRuntime::getSymbolNameForMethod ( const ObjCMethodDecl method,
bool  includeCategoryName = true 
)

◆ isWeakLinkedClass()

bool CGObjCRuntime::isWeakLinkedClass ( const ObjCInterfaceDecl cls)
static

Definition at line 420 of file CGObjCRuntime.cpp.

Referenced by canMessageReceiverBeNull().

◆ ModuleInitFunction()

virtual llvm::Function * clang::CodeGen::CGObjCRuntime::ModuleInitFunction ( )
pure virtual

Generate the function required to register all Objective-C components in this compilation unit with the runtime library.

◆ RegisterAlias()

virtual void clang::CodeGen::CGObjCRuntime::RegisterAlias ( const ObjCCompatibleAliasDecl OAD)
pure virtual

Register an class alias.

Member Data Documentation

◆ CGM

CodeGen::CodeGenModule& clang::CodeGen::CGObjCRuntime::CGM
protected

The documentation for this class was generated from the following files: