clang  13.0.0git
Enumerations | Functions | Variables
CGObjCMac.cpp File Reference
#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>
Include dependency graph for CGObjCMac.cpp:

Go to the source code of this file.

Enumerations

enum  MethodListType
 
enum  { kCFTaggedObjectID_Integer = (1 << 1) + 1 }
 
enum  FragileClassFlags {
  FragileABI_Class_Factory = 0x00001, FragileABI_Class_Meta = 0x00002, FragileABI_Class_HasCXXStructors = 0x02000, FragileABI_Class_Hidden = 0x20000,
  FragileABI_Class_CompiledByARC = 0x04000000, FragileABI_Class_HasMRCWeakIvars = 0x08000000
}
 
enum  NonFragileClassFlags {
  NonFragileABI_Class_Meta = 0x00001, NonFragileABI_Class_Root = 0x00002, NonFragileABI_Class_HasCXXStructors = 0x00004, NonFragileABI_Class_Hidden = 0x00010,
  NonFragileABI_Class_Exception = 0x00020, NonFragileABI_Class_HasIvarReleaser = 0x00040, NonFragileABI_Class_CompiledByARC = 0x00080, NonFragileABI_Class_HasCXXDestructorOnly = 0x00100,
  NonFragileABI_Class_HasMRCWeakIvars = 0x00200
}
 
enum  ImageInfoFlags {
  eImageInfo_FixAndContinue = (1 << 0), eImageInfo_GarbageCollected = (1 << 1), eImageInfo_GCOnly = (1 << 2), eImageInfo_OptimizedByDyld = (1 << 3),
  eImageInfo_CorrectedSynthesize = (1 << 4), eImageInfo_ImageIsSimulated = (1 << 5), eImageInfo_ClassProperties = (1 << 6)
}
 EmitImageInfo - Emit the image info marker used to encode some module level information. More...
 

Functions

static llvm::Constant * getConstantGEP (llvm::LLVMContext &VMContext, llvm::GlobalVariable *C, unsigned idx0, unsigned idx1)
 getConstantGEP() - Help routine to construct simple GEPs. More...
 
static bool hasObjCExceptionAttribute (ASTContext &Context, const ObjCInterfaceDecl *OID)
 hasObjCExceptionAttribute - Return true if this class or any super class has the objc_exception attribute. More...
 
static llvm::GlobalValue::LinkageTypes getLinkageTypeForObjCMetadata (CodeGenModule &CGM, StringRef Section)
 
static llvm::GlobalVariable * finishAndCreateGlobal (ConstantInitBuilder::StructBuilder &Builder, const llvm::Twine &Name, CodeGenModule &CGM)
 A helper function to create an internal or private global variable. More...
 
static llvm::StringMapEntry< llvm::GlobalVariable * > & GetConstantStringEntry (llvm::StringMap< llvm::GlobalVariable * > &Map, const StringLiteral *Literal, unsigned &StringLength)
 
static bool isWeakLinkedClass (const ObjCInterfaceDecl *ID)
 
static Qualifiers::GC GetGCAttrTypeForType (ASTContext &Ctx, QualType FQT, bool pointee=false)
 
static std::string getBlockLayoutInfoString (const SmallVectorImpl< CGObjCCommonMac::RUN_SKIP > &RunSkipBlockVars, bool HasCopyDisposeHelpers)
 
static void PushProtocolProperties (llvm::SmallPtrSet< const IdentifierInfo *, 16 > &PropertySet, SmallVectorImpl< const ObjCPropertyDecl * > &Properties, const ObjCProtocolDecl *Proto, bool IsClassProperty)
 
static bool hasWeakMember (QualType type)
 
static bool hasMRCWeakIvars (CodeGenModule &CGM, const ObjCImplementationDecl *ID)
 For compatibility, we only want to set the "HasMRCWeakIvars" flag (and actually fill in a layout string) if we really do have any __weak ivars. More...
 
static void addIfPresent (llvm::DenseSet< llvm::Value * > &S, Address V)
 
static llvm::GlobalValue::DLLStorageClassTypes getStorage (CodeGenModule &CGM, StringRef Name)
 

Variables

static const int ModuleVersion = 7
 

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
kCFTaggedObjectID_Integer 

Definition at line 2070 of file CGObjCMac.cpp.

◆ FragileClassFlags

Enumerator
FragileABI_Class_Factory 

Apparently: is not a meta-class.

FragileABI_Class_Meta 

Is a meta-class.

FragileABI_Class_HasCXXStructors 

Has a non-trivial constructor or destructor.

FragileABI_Class_Hidden 

Has hidden visibility.

FragileABI_Class_CompiledByARC 

Class implementation was compiled under ARC.

FragileABI_Class_HasMRCWeakIvars 

Class implementation was compiled under MRC and has MRC weak ivars.

Exclusive with CompiledByARC.

Definition at line 3464 of file CGObjCMac.cpp.

◆ ImageInfoFlags

EmitImageInfo - Emit the image info marker used to encode some module level information.

See: <rdr://4810609&4810587&4810587> struct IMAGE_INFO { unsigned version; unsigned flags; };

Enumerator
eImageInfo_FixAndContinue 
eImageInfo_GarbageCollected 
eImageInfo_GCOnly 
eImageInfo_OptimizedByDyld 
eImageInfo_CorrectedSynthesize 
eImageInfo_ImageIsSimulated 
eImageInfo_ClassProperties 

Definition at line 5142 of file CGObjCMac.cpp.

◆ MethodListType

enum MethodListType
strong

Definition at line 1129 of file CGObjCMac.cpp.

◆ NonFragileClassFlags

Enumerator
NonFragileABI_Class_Meta 

Is a meta-class.

NonFragileABI_Class_Root 

Is a root class.

NonFragileABI_Class_HasCXXStructors 

Has a non-trivial constructor or destructor.

NonFragileABI_Class_Hidden 

Has hidden visibility.

NonFragileABI_Class_Exception 

Has the exception attribute.

NonFragileABI_Class_HasIvarReleaser 

(Obsolete) ARC-specific: this class has a .release_ivars method

NonFragileABI_Class_CompiledByARC 

Class implementation was compiled under ARC.

NonFragileABI_Class_HasCXXDestructorOnly 

Class has non-trivial destructors, but zero-initialization is okay.

NonFragileABI_Class_HasMRCWeakIvars 

Class implementation was compiled under MRC and has MRC weak ivars.

Exclusive with CompiledByARC.

Definition at line 3485 of file CGObjCMac.cpp.

Function Documentation

◆ addIfPresent()

static void addIfPresent ( llvm::DenseSet< llvm::Value * > &  S,
Address  V 
)
static

Definition at line 4490 of file CGObjCMac.cpp.

◆ finishAndCreateGlobal()

static llvm::GlobalVariable* finishAndCreateGlobal ( ConstantInitBuilder::StructBuilder &  Builder,
const llvm::Twine &  Name,
CodeGenModule CGM 
)
static

A helper function to create an internal or private global variable.

Definition at line 1884 of file CGObjCMac.cpp.

◆ getBlockLayoutInfoString()

static std::string getBlockLayoutInfoString ( const SmallVectorImpl< CGObjCCommonMac::RUN_SKIP > &  RunSkipBlockVars,
bool  HasCopyDisposeHelpers 
)
static

Definition at line 2906 of file CGObjCMac.cpp.

References string().

◆ getConstantGEP()

static llvm::Constant* getConstantGEP ( llvm::LLVMContext &  VMContext,
llvm::GlobalVariable *  C,
unsigned  idx0,
unsigned  idx1 
)
static

getConstantGEP() - Help routine to construct simple GEPs.

Definition at line 1853 of file CGObjCMac.cpp.

◆ GetConstantStringEntry()

static llvm::StringMapEntry<llvm::GlobalVariable *>& GetConstantStringEntry ( llvm::StringMap< llvm::GlobalVariable * > &  Map,
const StringLiteral Literal,
unsigned StringLength 
)
static

Definition at line 1967 of file CGObjCMac.cpp.

References clang::StringLiteral::getString().

◆ GetGCAttrTypeForType()

static Qualifiers::GC GetGCAttrTypeForType ( ASTContext Ctx,
QualType  FQT,
bool  pointee = false 
)
static

◆ getLinkageTypeForObjCMetadata()

static llvm::GlobalValue::LinkageTypes getLinkageTypeForObjCMetadata ( CodeGenModule CGM,
StringRef  Section 
)
static

◆ getStorage()

static llvm::GlobalValue::DLLStorageClassTypes getStorage ( CodeGenModule CGM,
StringRef  Name 
)
static

◆ hasMRCWeakIvars()

static bool hasMRCWeakIvars ( CodeGenModule CGM,
const ObjCImplementationDecl ID 
)
static

For compatibility, we only want to set the "HasMRCWeakIvars" flag (and actually fill in a layout string) if we really do have any __weak ivars.

Definition at line 3533 of file CGObjCMac.cpp.

References clang::CodeGen::CodeGenModule::getLangOpts(), and hasWeakMember().

◆ hasObjCExceptionAttribute()

static bool hasObjCExceptionAttribute ( ASTContext Context,
const ObjCInterfaceDecl OID 
)
static

hasObjCExceptionAttribute - Return true if this class or any super class has the objc_exception attribute.

Definition at line 1865 of file CGObjCMac.cpp.

References clang::ObjCInterfaceDecl::getSuperClass(), and clang::Decl::hasAttr().

◆ hasWeakMember()

static bool hasWeakMember ( QualType  type)
static

Definition at line 3515 of file CGObjCMac.cpp.

Referenced by hasMRCWeakIvars().

◆ isWeakLinkedClass()

static bool isWeakLinkedClass ( const ObjCInterfaceDecl ID)
static

Definition at line 2154 of file CGObjCMac.cpp.

◆ PushProtocolProperties()

static void PushProtocolProperties ( llvm::SmallPtrSet< const IdentifierInfo *, 16 > &  PropertySet,
SmallVectorImpl< const ObjCPropertyDecl * > &  Properties,
const ObjCProtocolDecl Proto,
bool  IsClassProperty 
)
static

Variable Documentation

◆ ModuleVersion

const int ModuleVersion = 7
static

Definition at line 5219 of file CGObjCMac.cpp.