clang 20.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>

Go to the source code of this file.

Enumerations

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.
 
static bool hasObjCExceptionAttribute (ASTContext &Context, const ObjCInterfaceDecl *OID)
 hasObjCExceptionAttribute - Return true if this class or any super class has the objc_exception attribute.
 
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.
 
static llvm::StringMapEntry< llvm::GlobalVariable * > & GetConstantStringEntry (llvm::StringMap< llvm::GlobalVariable * > &Map, const StringLiteral *Literal, unsigned &StringLength)
 
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.
 
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 2047 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 3402 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 5075 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 3423 of file CGObjCMac.cpp.

Function Documentation

◆ addIfPresent()

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

Definition at line 4426 of file CGObjCMac.cpp.

References V.

◆ 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 1868 of file CGObjCMac.cpp.

References getLinkageTypeForObjCMetadata(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), and clang::CodeGen::CodeGenModule::getTriple().

◆ getBlockLayoutInfoString()

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

Definition at line 2846 of file CGObjCMac.cpp.

◆ 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 1837 of file CGObjCMac.cpp.

References clang::C.

◆ GetConstantStringEntry()

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

Definition at line 1951 of file CGObjCMac.cpp.

◆ GetGCAttrTypeForType()

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

◆ getLinkageTypeForObjCMetadata()

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

Definition at line 1859 of file CGObjCMac.cpp.

References clang::CodeGen::CodeGenModule::getTriple().

Referenced by finishAndCreateGlobal().

◆ 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 3471 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 1849 of file CGObjCMac.cpp.

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

Referenced by hasObjCExceptionAttribute().

◆ hasWeakMember()

static bool hasWeakMember ( QualType  type)
static

◆ 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 5153 of file CGObjCMac.cpp.