clang API Documentation

Defines | Enumerations | Functions
CodeGen/ItaniumCXXABI.cpp File Reference
#include "CGCXXABI.h"
#include "CGRecordLayout.h"
#include "CGVTables.h"
#include "CodeGenFunction.h"
#include "CodeGenModule.h"
#include "clang/AST/Mangle.h"
#include "clang/AST/Type.h"
#include "llvm/IR/CallSite.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Value.h"
#include "clang/AST/BuiltinTypes.def"
#include "clang/AST/TypeNodes.def"
Include dependency graph for CodeGen/ItaniumCXXABI.cpp:

Go to the source code of this file.

Defines

#define BUILTIN_TYPE(Id, SingletonId)
#define PLACEHOLDER_TYPE(Id, SingletonId)   case BuiltinType::Id:
#define TYPE(Class, Base)
#define ABSTRACT_TYPE(Class, Base)
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base)   case Type::Class:
#define NON_CANONICAL_TYPE(Class, Base)   case Type::Class:
#define DEPENDENT_TYPE(Class, Base)   case Type::Class:
#define TYPE(Class, Base)
#define ABSTRACT_TYPE(Class, Base)
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE(Class, Base)   case Type::Class:
#define NON_CANONICAL_TYPE(Class, Base)   case Type::Class:
#define DEPENDENT_TYPE(Class, Base)   case Type::Class:

Enumerations

enum  StructorCodegen

Functions

static llvm::Constant * getItaniumDynamicCastFn (CodeGenFunction &CGF)
static llvm::Constant * getBadCastFn (CodeGenFunction &CGF)
static CharUnits computeOffsetHint (ASTContext &Context, const CXXRecordDecl *Src, const CXXRecordDecl *Dst)
 Compute the src2dst_offset hint as described in the Itanium C++ ABI [2.9.7].
static llvm::Constant * getBadTypeidFn (CodeGenFunction &CGF)
static llvm::ValueperformTypeAdjustment (CodeGenFunction &CGF, llvm::Value *Ptr, int64_t NonVirtualAdjustment, int64_t VirtualAdjustment, bool IsReturnAdjustment)
static llvm::Constant * getGuardAcquireFn (CodeGenModule &CGM, llvm::PointerType *GuardPtrTy)
static llvm::Constant * getGuardReleaseFn (CodeGenModule &CGM, llvm::PointerType *GuardPtrTy)
static llvm::Constant * getGuardAbortFn (CodeGenModule &CGM, llvm::PointerType *GuardPtrTy)
static void emitGlobalDtorWithCXAAtExit (CodeGenFunction &CGF, llvm::Constant *dtor, llvm::Constant *addr, bool TLS)
 Register a global destructor using __cxa_atexit.
static bool isThreadWrapperReplaceable (const VarDecl *VD, CodeGen::CodeGenModule &CGM)
static
llvm::GlobalValue::LinkageTypes 
getThreadLocalWrapperLinkage (const VarDecl *VD, CodeGen::CodeGenModule &CGM)
static bool TypeInfoIsInStandardLibrary (const BuiltinType *Ty)
static bool TypeInfoIsInStandardLibrary (const PointerType *PointerTy)
static bool IsStandardLibraryRTTIDescriptor (QualType Ty)
static bool ShouldUseExternalRTTIDescriptor (CodeGenModule &CGM, QualType Ty)
static bool IsIncompleteClassType (const RecordType *RecordTy)
 IsIncompleteClassType - Returns whether the given record type is incomplete.
static bool ContainsIncompleteClassType (QualType Ty)
static bool CanUseSingleInheritance (const CXXRecordDecl *RD)
static
llvm::GlobalVariable::LinkageTypes 
getTypeInfoLinkage (CodeGenModule &CGM, QualType Ty)
 Return the linkage that the type info and type info name constants should have for the given type.
static unsigned ComputeQualifierFlags (Qualifiers Quals)
static unsigned ComputeVMIClassTypeInfoFlags (const CXXBaseSpecifier *Base, SeenBases &Bases)
static unsigned ComputeVMIClassTypeInfoFlags (const CXXRecordDecl *RD)
static StructorCodegen getCodegenToUse (CodeGenModule &CGM, const CXXMethodDecl *MD)
static void emitConstructorDestructorAlias (CodeGenModule &CGM, GlobalDecl AliasDecl, GlobalDecl TargetDecl)

Define Documentation

#define ABSTRACT_TYPE (   Class,
  Base 
)
#define ABSTRACT_TYPE (   Class,
  Base 
)
#define BUILTIN_TYPE (   Id,
  SingletonId 
)
#define DEPENDENT_TYPE (   Class,
  Base 
)    case Type::Class:
#define DEPENDENT_TYPE (   Class,
  Base 
)    case Type::Class:
#define NON_CANONICAL_TYPE (   Class,
  Base 
)    case Type::Class:
#define NON_CANONICAL_TYPE (   Class,
  Base 
)    case Type::Class:
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE (   Class,
  Base 
)    case Type::Class:
#define NON_CANONICAL_UNLESS_DEPENDENT_TYPE (   Class,
  Base 
)    case Type::Class:
#define PLACEHOLDER_TYPE (   Id,
  SingletonId 
)    case BuiltinType::Id:
#define TYPE (   Class,
  Base 
)
#define TYPE (   Class,
  Base 
)

Enumeration Type Documentation

Definition at line 3068 of file CodeGen/ItaniumCXXABI.cpp.


Function Documentation

static bool CanUseSingleInheritance ( const CXXRecordDecl RD) [static]
static CharUnits computeOffsetHint ( ASTContext Context,
const CXXRecordDecl Src,
const CXXRecordDecl Dst 
) [static]
static unsigned ComputeQualifierFlags ( Qualifiers  Quals) [static]

ComputeQualifierFlags - Compute the pointer type info flags from the given qualifier.

Definition at line 2748 of file CodeGen/ItaniumCXXABI.cpp.

References clang::Qualifiers::hasConst(), clang::Qualifiers::hasRestrict(), and clang::Qualifiers::hasVolatile().

static unsigned ComputeVMIClassTypeInfoFlags ( const CXXBaseSpecifier Base,
SeenBases &  Bases 
) [static]

ComputeVMIClassTypeInfoFlags - Compute the value of the flags member in abi::__vmi_class_type_info.

Definition at line 2809 of file CodeGen/ItaniumCXXABI.cpp.

References clang::CXXRecordDecl::bases(), clang::Type::getAs(), clang::CXXBaseSpecifier::getType(), and clang::CXXBaseSpecifier::isVirtual().

Referenced by ComputeVMIClassTypeInfoFlags().

static unsigned ComputeVMIClassTypeInfoFlags ( const CXXRecordDecl RD) [static]
static bool ContainsIncompleteClassType ( QualType  Ty) [static]

ContainsIncompleteClassType - Returns whether the given type contains an incomplete class type. This is true if

The given type is an incomplete class type. The given type is a pointer type whose pointee type contains an incomplete class type. The given type is a member pointer type whose class is an incomplete class type. The given type is a member pointer type whoise pointee type contains an incomplete class type. is an indirect or direct pointer to an incomplete class type.

Definition at line 2346 of file CodeGen/ItaniumCXXABI.cpp.

References IsIncompleteClassType().

Referenced by getTypeInfoLinkage().

static void emitConstructorDestructorAlias ( CodeGenModule CGM,
GlobalDecl  AliasDecl,
GlobalDecl  TargetDecl 
) [static]
static void emitGlobalDtorWithCXAAtExit ( CodeGenFunction CGF,
llvm::Constant *  dtor,
llvm::Constant *  addr,
bool  TLS 
) [static]
static llvm::Constant* getBadCastFn ( CodeGenFunction CGF) [static]
static llvm::Constant* getBadTypeidFn ( CodeGenFunction CGF) [static]
static StructorCodegen getCodegenToUse ( CodeGenModule CGM,
const CXXMethodDecl MD 
) [static]
static llvm::Constant* getGuardAbortFn ( CodeGenModule CGM,
llvm::PointerType *  GuardPtrTy 
) [static]
static llvm::Constant* getGuardAcquireFn ( CodeGenModule CGM,
llvm::PointerType *  GuardPtrTy 
) [static]
static llvm::Constant* getGuardReleaseFn ( CodeGenModule CGM,
llvm::PointerType *  GuardPtrTy 
) [static]
static llvm::Constant* getItaniumDynamicCastFn ( CodeGenFunction CGF) [static]
static llvm::GlobalValue::LinkageTypes getThreadLocalWrapperLinkage ( const VarDecl VD,
CodeGen::CodeGenModule CGM 
) [static]

Get the appropriate linkage for the wrapper function. This is essentially the weak form of the variable's linkage; every translation unit which needs the wrapper emits a copy, and we want the linker to merge them.

Definition at line 1880 of file CodeGen/ItaniumCXXABI.cpp.

References clang::CodeGen::CodeGenModule::getLLVMLinkageVarDefinition(), and isThreadWrapperReplaceable().

static llvm::GlobalVariable::LinkageTypes getTypeInfoLinkage ( CodeGenModule CGM,
QualType  Ty 
) [static]
static bool IsIncompleteClassType ( const RecordType RecordTy) [static]

IsIncompleteClassType - Returns whether the given record type is incomplete.

Definition at line 2331 of file CodeGen/ItaniumCXXABI.cpp.

References clang::RecordType::getDecl(), and clang::TagDecl::isCompleteDefinition().

Referenced by ContainsIncompleteClassType().

IsStandardLibraryRTTIDescriptor - Returns whether the type information for the given type exists in the standard library.

Definition at line 2285 of file CodeGen/ItaniumCXXABI.cpp.

References TypeInfoIsInStandardLibrary().

static bool isThreadWrapperReplaceable ( const VarDecl VD,
CodeGen::CodeGenModule CGM 
) [static]
static llvm::Value* performTypeAdjustment ( CodeGenFunction CGF,
llvm::Value Ptr,
int64_t  NonVirtualAdjustment,
int64_t  VirtualAdjustment,
bool  IsReturnAdjustment 
) [static]
static bool ShouldUseExternalRTTIDescriptor ( CodeGenModule CGM,
QualType  Ty 
) [static]

ShouldUseExternalRTTIDescriptor - Returns whether the type information for the given type exists somewhere else, and that we should not emit the type information in this translation unit. Assumes that it is not a standard-library type.

Definition at line 2302 of file CodeGen/ItaniumCXXABI.cpp.

References clang::CodeGen::CodeGenModule::getContext(), clang::ASTContext::getLangOpts(), clang::CodeGen::CodeGenModule::getVTables(), clang::Decl::hasAttr(), clang::CXXRecordDecl::hasDefinition(), clang::CXXRecordDecl::isDynamicClass(), and clang::CodeGen::CodeGenVTables::isVTableExternal().

static bool TypeInfoIsInStandardLibrary ( const BuiltinType Ty) [static]

TypeInfoIsInStandardLibrary - Given a builtin type, returns whether the type info for that type is defined in the standard library.

Definition at line 2205 of file CodeGen/ItaniumCXXABI.cpp.

References clang::BuiltinType::getKind().

Referenced by IsStandardLibraryRTTIDescriptor(), and TypeInfoIsInStandardLibrary().

static bool TypeInfoIsInStandardLibrary ( const PointerType PointerTy) [static]