#include "CGBlocks.h"
#include "CGCleanup.h"
#include "CGObjCRuntime.h"
#include "CGRecordLayout.h"
#include "CodeGenFunction.h"
#include "CodeGenModule.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Attr.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/Mangle.h"
#include "clang/AST/RecordLayout.h"
#include "clang/AST/StmtObjC.h"
#include "clang/Basic/CodeGenOptions.h"
#include "clang/Basic/LangOptions.h"
#include "clang/CodeGen/CGFunctionInfo.h"
#include "clang/CodeGen/ConstantInitBuilder.h"
#include "llvm/ADT/CachedHashString.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/UniqueVector.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/ScopedPrinter.h"
#include "llvm/Support/raw_ostream.h"
#include <cstdio>
usingnamespaceclang;
usingnamespaceCodeGen;
namespace {
class ObjCCommonTypesHelper { … };
class ObjCTypesHelper : public ObjCCommonTypesHelper { … };
class ObjCNonFragileABITypesHelper : public ObjCCommonTypesHelper { … };
enum class ObjCLabelType { … };
class CGObjCCommonMac : public CodeGen::CGObjCRuntime { … };
namespace {
enum class MethodListType { … };
class ProtocolMethodLists { … };
}
class CGObjCMac : public CGObjCCommonMac { … };
class CGObjCNonFragileABIMac : public CGObjCCommonMac { … };
struct NullReturnState { … };
}
static llvm::Constant *getConstantGEP(llvm::LLVMContext &VMContext,
llvm::GlobalVariable *C, unsigned idx0,
unsigned idx1) { … }
static bool hasObjCExceptionAttribute(ASTContext &Context,
const ObjCInterfaceDecl *OID) { … }
static llvm::GlobalValue::LinkageTypes
getLinkageTypeForObjCMetadata(CodeGenModule &CGM, StringRef Section) { … }
static llvm::GlobalVariable *
finishAndCreateGlobal(ConstantInitBuilder::StructBuilder &Builder,
const llvm::Twine &Name, CodeGenModule &CGM) { … }
CGObjCMac::CGObjCMac(CodeGen::CodeGenModule &cgm) : … { … }
llvm::Value *CGObjCMac::GetClass(CodeGenFunction &CGF,
const ObjCInterfaceDecl *ID) { … }
llvm::Value *CGObjCMac::GetSelector(CodeGenFunction &CGF, Selector Sel) { … }
Address CGObjCMac::GetAddrOfSelector(CodeGenFunction &CGF, Selector Sel) { … }
llvm::Value *CGObjCMac::GetSelector(CodeGenFunction &CGF, const ObjCMethodDecl
*Method) { … }
llvm::Constant *CGObjCMac::GetEHType(QualType T) { … }
ConstantAddress
CGObjCCommonMac::GenerateConstantString(const StringLiteral *SL) { … }
static llvm::StringMapEntry<llvm::GlobalVariable *> &
GetConstantStringEntry(llvm::StringMap<llvm::GlobalVariable *> &Map,
const StringLiteral *Literal, unsigned &StringLength) { … }
llvm::Constant *CGObjCMac::getNSConstantStringClassRef() { … }
llvm::Constant *CGObjCNonFragileABIMac::getNSConstantStringClassRef() { … }
ConstantAddress
CGObjCCommonMac::GenerateConstantNSString(const StringLiteral *Literal) { … }
enum { … };
CodeGen::RValue
CGObjCMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
ReturnValueSlot Return,
QualType ResultType,
Selector Sel,
const ObjCInterfaceDecl *Class,
bool isCategoryImpl,
llvm::Value *Receiver,
bool IsClassMessage,
const CodeGen::CallArgList &CallArgs,
const ObjCMethodDecl *Method) { … }
CodeGen::RValue CGObjCMac::GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
ReturnValueSlot Return,
QualType ResultType,
Selector Sel,
llvm::Value *Receiver,
const CallArgList &CallArgs,
const ObjCInterfaceDecl *Class,
const ObjCMethodDecl *Method) { … }
CodeGen::RValue
CGObjCCommonMac::EmitMessageSend(CodeGen::CodeGenFunction &CGF,
ReturnValueSlot Return,
QualType ResultType,
Selector Sel,
llvm::Value *Arg0,
QualType Arg0Ty,
bool IsSuper,
const CallArgList &CallArgs,
const ObjCMethodDecl *Method,
const ObjCInterfaceDecl *ClassReceiver,
const ObjCCommonTypesHelper &ObjCTypes) { … }
static Qualifiers::GC GetGCAttrTypeForType(ASTContext &Ctx, QualType FQT,
bool pointee = false) { … }
namespace {
struct IvarInfo { … };
class IvarLayoutBuilder { … };
}
llvm::Constant *CGObjCCommonMac::BuildGCBlockLayout(CodeGenModule &CGM,
const CGBlockInfo &blockInfo) { … }
void IvarLayoutBuilder::visitBlock(const CGBlockInfo &blockInfo) { … }
Qualifiers::ObjCLifetime CGObjCCommonMac::getBlockCaptureLifetime(QualType FQT,
bool ByrefLayout) { … }
void CGObjCCommonMac::UpdateRunSkipBlockVars(bool IsByref,
Qualifiers::ObjCLifetime LifeTime,
CharUnits FieldOffset,
CharUnits FieldSize) { … }
void CGObjCCommonMac::BuildRCRecordLayout(const llvm::StructLayout *RecLayout,
const RecordDecl *RD,
ArrayRef<const FieldDecl*> RecFields,
CharUnits BytePos, bool &HasUnion,
bool ByrefLayout) { … }
void CGObjCCommonMac::BuildRCBlockVarRecordLayout(const RecordType *RT,
CharUnits BytePos,
bool &HasUnion,
bool ByrefLayout) { … }
uint64_t CGObjCCommonMac::InlineLayoutInstruction(
SmallVectorImpl<unsigned char> &Layout) { … }
llvm::Constant *CGObjCCommonMac::getBitmapBlockLayout(bool ComputeByrefLayout) { … }
static std::string getBlockLayoutInfoString(
const SmallVectorImpl<CGObjCCommonMac::RUN_SKIP> &RunSkipBlockVars,
bool HasCopyDisposeHelpers) { … }
void CGObjCCommonMac::fillRunSkipBlockVars(CodeGenModule &CGM,
const CGBlockInfo &blockInfo) { … }
llvm::Constant *
CGObjCCommonMac::BuildRCBlockLayout(CodeGenModule &CGM,
const CGBlockInfo &blockInfo) { … }
std::string CGObjCCommonMac::getRCBlockLayoutStr(CodeGenModule &CGM,
const CGBlockInfo &blockInfo) { … }
llvm::Constant *CGObjCCommonMac::BuildByrefLayout(CodeGen::CodeGenModule &CGM,
QualType T) { … }
llvm::Value *CGObjCMac::GenerateProtocolRef(CodeGenFunction &CGF,
const ObjCProtocolDecl *PD) { … }
void CGObjCCommonMac::GenerateProtocol(const ObjCProtocolDecl *PD) { … }
llvm::Constant *CGObjCCommonMac::GetProtocolRef(const ObjCProtocolDecl *PD) { … }
llvm::Value *CGObjCCommonMac::EmitClassRefViaRuntime(
CodeGenFunction &CGF,
const ObjCInterfaceDecl *ID,
ObjCCommonTypesHelper &ObjCTypes) { … }
llvm::Constant *CGObjCMac::GetOrEmitProtocol(const ObjCProtocolDecl *PD) { … }
llvm::Constant *CGObjCMac::GetOrEmitProtocolRef(const ObjCProtocolDecl *PD) { … }
llvm::Constant *
CGObjCMac::EmitProtocolExtension(const ObjCProtocolDecl *PD,
const ProtocolMethodLists &methodLists) { … }
llvm::Constant *
CGObjCMac::EmitProtocolList(Twine name,
ObjCProtocolDecl::protocol_iterator begin,
ObjCProtocolDecl::protocol_iterator end) { … }
static void
PushProtocolProperties(llvm::SmallPtrSet<const IdentifierInfo*,16> &PropertySet,
SmallVectorImpl<const ObjCPropertyDecl *> &Properties,
const ObjCProtocolDecl *Proto,
bool IsClassProperty) { … }
llvm::Constant *CGObjCCommonMac::EmitPropertyList(Twine Name,
const Decl *Container,
const ObjCContainerDecl *OCD,
const ObjCCommonTypesHelper &ObjCTypes,
bool IsClassProperty) { … }
llvm::Constant *
CGObjCCommonMac::EmitProtocolMethodTypes(Twine Name,
ArrayRef<llvm::Constant*> MethodTypes,
const ObjCCommonTypesHelper &ObjCTypes) { … }
void CGObjCMac::GenerateCategory(const ObjCCategoryImplDecl *OCD) { … }
enum FragileClassFlags { … };
enum NonFragileClassFlags { … };
static bool hasWeakMember(QualType type) { … }
static bool hasMRCWeakIvars(CodeGenModule &CGM,
const ObjCImplementationDecl *ID) { … }
void CGObjCMac::GenerateClass(const ObjCImplementationDecl *ID) { … }
llvm::Constant *CGObjCMac::EmitMetaClass(const ObjCImplementationDecl *ID,
llvm::Constant *Protocols,
ArrayRef<const ObjCMethodDecl*> Methods) { … }
llvm::Constant *CGObjCMac::EmitMetaClassRef(const ObjCInterfaceDecl *ID) { … }
llvm::Value *CGObjCMac::EmitSuperClassRef(const ObjCInterfaceDecl *ID) { … }
llvm::Constant *
CGObjCMac::EmitClassExtension(const ObjCImplementationDecl *ID,
CharUnits InstanceSize, bool hasMRCWeakIvars,
bool isMetaclass) { … }
llvm::Constant *CGObjCMac::EmitIvarList(const ObjCImplementationDecl *ID,
bool ForClass) { … }
void CGObjCMac::emitMethodDescriptionConstant(ConstantArrayBuilder &builder,
const ObjCMethodDecl *MD) { … }
void CGObjCMac::emitMethodConstant(ConstantArrayBuilder &builder,
const ObjCMethodDecl *MD) { … }
llvm::Constant *CGObjCMac::emitMethodList(Twine name, MethodListType MLT,
ArrayRef<const ObjCMethodDecl *> methods) { … }
llvm::Function *CGObjCCommonMac::GenerateMethod(const ObjCMethodDecl *OMD,
const ObjCContainerDecl *CD) { … }
llvm::Function *
CGObjCCommonMac::GenerateDirectMethod(const ObjCMethodDecl *OMD,
const ObjCContainerDecl *CD) { … }
void CGObjCCommonMac::GenerateDirectMethodPrologue(
CodeGenFunction &CGF, llvm::Function *Fn, const ObjCMethodDecl *OMD,
const ObjCContainerDecl *CD) { … }
llvm::GlobalVariable *CGObjCCommonMac::CreateMetadataVar(Twine Name,
ConstantStructBuilder &Init,
StringRef Section,
CharUnits Align,
bool AddToUsed) { … }
llvm::GlobalVariable *CGObjCCommonMac::CreateMetadataVar(Twine Name,
llvm::Constant *Init,
StringRef Section,
CharUnits Align,
bool AddToUsed) { … }
llvm::GlobalVariable *
CGObjCCommonMac::CreateCStringLiteral(StringRef Name, ObjCLabelType Type,
bool ForceNonFragileABI,
bool NullTerminate) { … }
llvm::Function *CGObjCMac::ModuleInitFunction() { … }
llvm::FunctionCallee CGObjCMac::GetPropertyGetFunction() { … }
llvm::FunctionCallee CGObjCMac::GetPropertySetFunction() { … }
llvm::FunctionCallee CGObjCMac::GetOptimizedPropertySetFunction(bool atomic,
bool copy) { … }
llvm::FunctionCallee CGObjCMac::GetGetStructFunction() { … }
llvm::FunctionCallee CGObjCMac::GetSetStructFunction() { … }
llvm::FunctionCallee CGObjCMac::GetCppAtomicObjectGetFunction() { … }
llvm::FunctionCallee CGObjCMac::GetCppAtomicObjectSetFunction() { … }
llvm::FunctionCallee CGObjCMac::EnumerationMutationFunction() { … }
void CGObjCMac::EmitTryStmt(CodeGenFunction &CGF, const ObjCAtTryStmt &S) { … }
void CGObjCMac::EmitSynchronizedStmt(CodeGenFunction &CGF,
const ObjCAtSynchronizedStmt &S) { … }
namespace {
struct PerformFragileFinally final : EHScopeStack::Cleanup { … };
class FragileHazards { … };
}
FragileHazards::FragileHazards(CodeGenFunction &CGF) : … { … }
void FragileHazards::emitWriteHazard() { … }
void FragileHazards::emitReadHazard(CGBuilderTy &Builder) { … }
void FragileHazards::emitHazardsInNewBlocks() { … }
static void addIfPresent(llvm::DenseSet<llvm::Value*> &S, Address V) { … }
void FragileHazards::collectLocals() { … }
llvm::FunctionType *FragileHazards::GetAsmFnType() { … }
void CGObjCMac::EmitTryOrSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
const Stmt &S) { … }
void CGObjCMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
const ObjCAtThrowStmt &S,
bool ClearInsertionPoint) { … }
llvm::Value * CGObjCMac::EmitObjCWeakRead(CodeGen::CodeGenFunction &CGF,
Address AddrWeakObj) { … }
void CGObjCMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dst) { … }
void CGObjCMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dst,
bool threadlocal) { … }
void CGObjCMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dst,
llvm::Value *ivarOffset) { … }
void CGObjCMac::EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dst) { … }
void CGObjCMac::EmitGCMemmoveCollectable(CodeGen::CodeGenFunction &CGF,
Address DestPtr, Address SrcPtr,
llvm::Value *size) { … }
LValue CGObjCMac::EmitObjCValueForIvar(CodeGen::CodeGenFunction &CGF,
QualType ObjectTy,
llvm::Value *BaseValue,
const ObjCIvarDecl *Ivar,
unsigned CVRQualifiers) { … }
llvm::Value *CGObjCMac::EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
const ObjCInterfaceDecl *Interface,
const ObjCIvarDecl *Ivar) { … }
std::string CGObjCCommonMac::GetSectionName(StringRef Section,
StringRef MachOAttributes) { … }
enum ImageInfoFlags { … };
void CGObjCCommonMac::EmitImageInfo() { … }
static const int ModuleVersion = …;
void CGObjCMac::EmitModuleInfo() { … }
llvm::Constant *CGObjCMac::EmitModuleSymbols() { … }
llvm::Value *CGObjCMac::EmitClassRefFromId(CodeGenFunction &CGF,
IdentifierInfo *II) { … }
llvm::Value *CGObjCMac::EmitClassRef(CodeGenFunction &CGF,
const ObjCInterfaceDecl *ID) { … }
llvm::Value *CGObjCMac::EmitNSAutoreleasePoolClassRef(CodeGenFunction &CGF) { … }
llvm::Value *CGObjCMac::EmitSelector(CodeGenFunction &CGF, Selector Sel) { … }
ConstantAddress CGObjCMac::EmitSelectorAddr(Selector Sel) { … }
llvm::Constant *CGObjCCommonMac::GetClassName(StringRef RuntimeName) { … }
llvm::Function *CGObjCCommonMac::GetMethodDefinition(const ObjCMethodDecl *MD) { … }
llvm::Constant *CGObjCCommonMac::GetIvarLayoutName(IdentifierInfo *Ident,
const ObjCCommonTypesHelper &ObjCTypes) { … }
void IvarLayoutBuilder::visitRecord(const RecordType *RT,
CharUnits offset) { … }
template <class Iterator, class GetOffsetFn>
void IvarLayoutBuilder::visitAggregate(Iterator begin, Iterator end,
CharUnits aggregateOffset,
const GetOffsetFn &getOffset) { … }
void IvarLayoutBuilder::visitField(const FieldDecl *field,
CharUnits fieldOffset) { … }
llvm::Constant *IvarLayoutBuilder::buildBitmap(CGObjCCommonMac &CGObjC,
llvm::SmallVectorImpl<unsigned char> &buffer) { … }
llvm::Constant *
CGObjCCommonMac::BuildIvarLayout(const ObjCImplementationDecl *OMD,
CharUnits beginOffset, CharUnits endOffset,
bool ForStrongLayout, bool HasMRCWeakIvars) { … }
llvm::Constant *CGObjCCommonMac::GetMethodVarName(Selector Sel) { … }
llvm::Constant *CGObjCCommonMac::GetMethodVarName(IdentifierInfo *ID) { … }
llvm::Constant *CGObjCCommonMac::GetMethodVarType(const FieldDecl *Field) { … }
llvm::Constant *CGObjCCommonMac::GetMethodVarType(const ObjCMethodDecl *D,
bool Extended) { … }
llvm::Constant *CGObjCCommonMac::GetPropertyName(IdentifierInfo *Ident) { … }
llvm::Constant *
CGObjCCommonMac::GetPropertyTypeString(const ObjCPropertyDecl *PD,
const Decl *Container) { … }
void CGObjCMac::FinishModule() { … }
CGObjCNonFragileABIMac::CGObjCNonFragileABIMac(CodeGen::CodeGenModule &cgm)
: … { … }
ObjCCommonTypesHelper::ObjCCommonTypesHelper(CodeGen::CodeGenModule &cgm)
: … { … }
ObjCTypesHelper::ObjCTypesHelper(CodeGen::CodeGenModule &cgm)
: … { … }
ObjCNonFragileABITypesHelper::ObjCNonFragileABITypesHelper(CodeGen::CodeGenModule &cgm)
: … { … }
llvm::Function *CGObjCNonFragileABIMac::ModuleInitFunction() { … }
void CGObjCNonFragileABIMac::AddModuleClassList(
ArrayRef<llvm::GlobalValue *> Container, StringRef SymbolName,
StringRef SectionName) { … }
void CGObjCNonFragileABIMac::FinishNonFragileABIModule() { … }
bool CGObjCNonFragileABIMac::isVTableDispatchedSelector(Selector Sel) { … }
llvm::GlobalVariable * CGObjCNonFragileABIMac::BuildClassRoTInitializer(
unsigned flags,
unsigned InstanceStart,
unsigned InstanceSize,
const ObjCImplementationDecl *ID) { … }
llvm::GlobalVariable *
CGObjCNonFragileABIMac::BuildClassObject(const ObjCInterfaceDecl *CI,
bool isMetaclass,
llvm::Constant *IsAGV,
llvm::Constant *SuperClassGV,
llvm::Constant *ClassRoGV,
bool HiddenVisibility) { … }
bool CGObjCNonFragileABIMac::ImplementationIsNonLazy(
const ObjCImplDecl *OD) const { … }
void CGObjCNonFragileABIMac::GetClassSizeInfo(const ObjCImplementationDecl *OID,
uint32_t &InstanceStart,
uint32_t &InstanceSize) { … }
static llvm::GlobalValue::DLLStorageClassTypes getStorage(CodeGenModule &CGM,
StringRef Name) { … }
void CGObjCNonFragileABIMac::GenerateClass(const ObjCImplementationDecl *ID) { … }
llvm::Value *CGObjCNonFragileABIMac::GenerateProtocolRef(CodeGenFunction &CGF,
const ObjCProtocolDecl *PD) { … }
void CGObjCNonFragileABIMac::GenerateCategory(const ObjCCategoryImplDecl *OCD) { … }
void CGObjCNonFragileABIMac::emitMethodConstant(ConstantArrayBuilder &builder,
const ObjCMethodDecl *MD,
bool forProtocol) { … }
llvm::Constant *
CGObjCNonFragileABIMac::emitMethodList(Twine name, MethodListType kind,
ArrayRef<const ObjCMethodDecl *> methods) { … }
llvm::GlobalVariable *
CGObjCNonFragileABIMac::ObjCIvarOffsetVariable(const ObjCInterfaceDecl *ID,
const ObjCIvarDecl *Ivar) { … }
llvm::Constant *
CGObjCNonFragileABIMac::EmitIvarOffsetVar(const ObjCInterfaceDecl *ID,
const ObjCIvarDecl *Ivar,
unsigned long int Offset) { … }
llvm::Constant *CGObjCNonFragileABIMac::EmitIvarList(
const ObjCImplementationDecl *ID) { … }
llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocolRef(
const ObjCProtocolDecl *PD) { … }
llvm::Constant *CGObjCNonFragileABIMac::GetOrEmitProtocol(
const ObjCProtocolDecl *PD) { … }
llvm::Constant *
CGObjCNonFragileABIMac::EmitProtocolList(Twine Name,
ObjCProtocolDecl::protocol_iterator begin,
ObjCProtocolDecl::protocol_iterator end) { … }
LValue CGObjCNonFragileABIMac::EmitObjCValueForIvar(
CodeGen::CodeGenFunction &CGF,
QualType ObjectTy,
llvm::Value *BaseValue,
const ObjCIvarDecl *Ivar,
unsigned CVRQualifiers) { … }
llvm::Value *
CGObjCNonFragileABIMac::EmitIvarOffset(CodeGen::CodeGenFunction &CGF,
const ObjCInterfaceDecl *Interface,
const ObjCIvarDecl *Ivar) { … }
static void appendSelectorForMessageRefTable(std::string &buffer,
Selector selector) { … }
RValue
CGObjCNonFragileABIMac::EmitVTableMessageSend(CodeGenFunction &CGF,
ReturnValueSlot returnSlot,
QualType resultType,
Selector selector,
llvm::Value *arg0,
QualType arg0Type,
bool isSuper,
const CallArgList &formalArgs,
const ObjCMethodDecl *method) { … }
CodeGen::RValue
CGObjCNonFragileABIMac::GenerateMessageSend(CodeGen::CodeGenFunction &CGF,
ReturnValueSlot Return,
QualType ResultType,
Selector Sel,
llvm::Value *Receiver,
const CallArgList &CallArgs,
const ObjCInterfaceDecl *Class,
const ObjCMethodDecl *Method) { … }
llvm::Constant *
CGObjCNonFragileABIMac::GetClassGlobal(const ObjCInterfaceDecl *ID,
bool metaclass,
ForDefinition_t isForDefinition) { … }
llvm::Constant *
CGObjCNonFragileABIMac::GetClassGlobal(StringRef Name,
ForDefinition_t IsForDefinition,
bool Weak, bool DLLImport) { … }
llvm::Constant *
CGObjCNonFragileABIMac::GetClassGlobalForClassRef(const ObjCInterfaceDecl *ID) { … }
llvm::Value *
CGObjCNonFragileABIMac::EmitLoadOfClassRef(CodeGenFunction &CGF,
const ObjCInterfaceDecl *ID,
llvm::GlobalVariable *Entry) { … }
llvm::Value *
CGObjCNonFragileABIMac::EmitClassRefFromId(CodeGenFunction &CGF,
IdentifierInfo *II,
const ObjCInterfaceDecl *ID) { … }
llvm::Value *CGObjCNonFragileABIMac::EmitClassRef(CodeGenFunction &CGF,
const ObjCInterfaceDecl *ID) { … }
llvm::Value *CGObjCNonFragileABIMac::EmitNSAutoreleasePoolClassRef(
CodeGenFunction &CGF) { … }
llvm::Value *
CGObjCNonFragileABIMac::EmitSuperClassRef(CodeGenFunction &CGF,
const ObjCInterfaceDecl *ID) { … }
llvm::Value *CGObjCNonFragileABIMac::EmitMetaClassRef(CodeGenFunction &CGF,
const ObjCInterfaceDecl *ID,
bool Weak) { … }
llvm::Value *CGObjCNonFragileABIMac::GetClass(CodeGenFunction &CGF,
const ObjCInterfaceDecl *ID) { … }
CodeGen::RValue
CGObjCNonFragileABIMac::GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
ReturnValueSlot Return,
QualType ResultType,
Selector Sel,
const ObjCInterfaceDecl *Class,
bool isCategoryImpl,
llvm::Value *Receiver,
bool IsClassMessage,
const CodeGen::CallArgList &CallArgs,
const ObjCMethodDecl *Method) { … }
llvm::Value *CGObjCNonFragileABIMac::EmitSelector(CodeGenFunction &CGF,
Selector Sel) { … }
ConstantAddress CGObjCNonFragileABIMac::EmitSelectorAddr(Selector Sel) { … }
void CGObjCNonFragileABIMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src,
Address dst,
llvm::Value *ivarOffset) { … }
void CGObjCNonFragileABIMac::EmitObjCStrongCastAssign(
CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dst) { … }
void CGObjCNonFragileABIMac::EmitGCMemmoveCollectable(
CodeGen::CodeGenFunction &CGF, Address DestPtr, Address SrcPtr,
llvm::Value *Size) { … }
llvm::Value * CGObjCNonFragileABIMac::EmitObjCWeakRead(
CodeGen::CodeGenFunction &CGF,
Address AddrWeakObj) { … }
void CGObjCNonFragileABIMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dst) { … }
void CGObjCNonFragileABIMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, Address dst,
bool threadlocal) { … }
void
CGObjCNonFragileABIMac::EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
const ObjCAtSynchronizedStmt &S) { … }
llvm::Constant *
CGObjCNonFragileABIMac::GetEHType(QualType T) { … }
void CGObjCNonFragileABIMac::EmitTryStmt(CodeGen::CodeGenFunction &CGF,
const ObjCAtTryStmt &S) { … }
void CGObjCNonFragileABIMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
const ObjCAtThrowStmt &S,
bool ClearInsertionPoint) { … }
llvm::Constant *
CGObjCNonFragileABIMac::GetInterfaceEHType(const ObjCInterfaceDecl *ID,
ForDefinition_t IsForDefinition) { … }
CodeGen::CGObjCRuntime *
CodeGen::CreateMacObjCRuntime(CodeGen::CodeGenModule &CGM) { … }