clang  5.0.0
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/CodeGen/ConstantInitBuilder.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/RecordLayout.h"
#include "clang/AST/StmtObjC.h"
#include "clang/Basic/LangOptions.h"
#include "clang/CodeGen/CGFunctionInfo.h"
#include "clang/Frontend/CodeGenOptions.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/IR/CallSite.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/raw_ostream.h"
#include <cstdio>
Include dependency graph for CGObjCMac.cpp:

Go to the source code of this file.

Enumerations

enum  ObjCLabelType
 
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::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 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, llvm::Value *V)
 
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
Enumerator
kCFTaggedObjectID_Integer 

Definition at line 1976 of file CGObjCMac.cpp.

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

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

enum MethodListType
strong

Definition at line 1095 of file CGObjCMac.cpp.

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

enum ObjCLabelType
strong

Definition at line 734 of file CGObjCMac.cpp.

Function Documentation

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

Definition at line 4182 of file CGObjCMac.cpp.

static void addIfPresent ( llvm::DenseSet< llvm::Value * > &  S,
Address  V 
)
static
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 1781 of file CGObjCMac.cpp.

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

Definition at line 1873 of file CGObjCMac.cpp.

References clang::StringLiteral::getString().

static Qualifiers::GC GetGCAttrTypeForType ( ASTContext Ctx,
QualType  FQT,
bool  pointee = false 
)
static
static llvm::GlobalValue::DLLStorageClassTypes getStorage ( CodeGenModule CGM,
StringRef  Name 
)
static
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 3369 of file CGObjCMac.cpp.

References clang::ObjCInterfaceDecl::all_declared_ivar_begin(), clang::ObjCImplDecl::getClassInterface(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::ObjCIvarDecl::getNextIvar(), and hasWeakMember().

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

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

static bool hasWeakMember ( QualType  type)
static

Definition at line 3351 of file CGObjCMac.cpp.

References clang::Type::getAs(), and clang::QualType::getObjCLifetime().

Referenced by hasMRCWeakIvars().

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

Variable Documentation

const int ModuleVersion = 7
static

Definition at line 4908 of file CGObjCMac.cpp.