|
clang
5.0.0
|
#include "CGCXXABI.h"#include "CGCleanup.h"#include "CGRecordLayout.h"#include "CGVTables.h"#include "CodeGenFunction.h"#include "CodeGenModule.h"#include "TargetInfo.h"#include "clang/CodeGen/ConstantInitBuilder.h"#include "clang/AST/Mangle.h"#include "clang/AST/Type.h"#include "clang/AST/StmtCXX.h"#include "llvm/IR/CallSite.h"#include "llvm/IR/DataLayout.h"#include "llvm/IR/Instructions.h"#include "llvm/IR/Intrinsics.h"#include "llvm/IR/Value.h"#include "clang/Basic/OpenCLImageTypes.def"#include "clang/AST/BuiltinTypes.def"#include "clang/AST/TypeNodes.def"Go to the source code of this file.
Macros | |
| #define | IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) case BuiltinType::Id: |
| #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 * | getAllocateExceptionFn (CodeGenModule &CGM) |
| static llvm::Constant * | getThrowFn (CodeGenModule &CGM) |
| 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]. More... | |
| static llvm::Constant * | getBadTypeidFn (CodeGenFunction &CGF) |
| static llvm::Value * | performTypeAdjustment (CodeGenFunction &CGF, Address InitialPtr, 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. More... | |
| static bool | isThreadWrapperReplaceable (const VarDecl *VD, CodeGen::CodeGenModule &CGM) |
| static llvm::GlobalValue::LinkageTypes | getThreadLocalWrapperLinkage (const VarDecl *VD, CodeGen::CodeGenModule &CGM) |
| Get the appropriate linkage for the wrapper function. More... | |
| static bool | TypeInfoIsInStandardLibrary (const BuiltinType *Ty) |
| TypeInfoIsInStandardLibrary - Given a builtin type, returns whether the type info for that type is defined in the standard library. More... | |
| static bool | TypeInfoIsInStandardLibrary (const PointerType *PointerTy) |
| static bool | IsStandardLibraryRTTIDescriptor (QualType Ty) |
| IsStandardLibraryRTTIDescriptor - Returns whether the type information for the given type exists in the standard library. More... | |
| static bool | ShouldUseExternalRTTIDescriptor (CodeGenModule &CGM, QualType Ty) |
| 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. More... | |
| static bool | IsIncompleteClassType (const RecordType *RecordTy) |
| IsIncompleteClassType - Returns whether the given record type is incomplete. More... | |
| static bool | ContainsIncompleteClassType (QualType Ty) |
| ContainsIncompleteClassType - Returns whether the given type contains an incomplete class type. More... | |
| 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. More... | |
| static unsigned | ComputeVMIClassTypeInfoFlags (const CXXBaseSpecifier *Base, SeenBases &Bases) |
| ComputeVMIClassTypeInfoFlags - Compute the value of the flags member in abi::__vmi_class_type_info. More... | |
| static unsigned | ComputeVMIClassTypeInfoFlags (const CXXRecordDecl *RD) |
| static unsigned | extractPBaseFlags (ASTContext &Ctx, QualType &Type) |
Compute the flags for a __pbase_type_info, and remove the corresponding pieces from Type. More... | |
| static StructorCodegen | getCodegenToUse (CodeGenModule &CGM, const CXXMethodDecl *MD) |
| static void | emitConstructorDestructorAlias (CodeGenModule &CGM, GlobalDecl AliasDecl, GlobalDecl TargetDecl) |
| static llvm::Constant * | getBeginCatchFn (CodeGenModule &CGM) |
| static llvm::Constant * | getEndCatchFn (CodeGenModule &CGM) |
| static llvm::Constant * | getGetExceptionPtrFn (CodeGenModule &CGM) |
| static llvm::Value * | CallBeginCatch (CodeGenFunction &CGF, llvm::Value *Exn, bool EndMightThrow) |
| Emits a call to __cxa_begin_catch and enters a cleanup to call __cxa_end_catch. More... | |
| static void | InitCatchParam (CodeGenFunction &CGF, const VarDecl &CatchParam, Address ParamAddr, SourceLocation Loc) |
| A "special initializer" callback for initializing a catch parameter during catch initialization. More... | |
| static llvm::Constant * | getClangCallTerminateFn (CodeGenModule &CGM) |
| Get or define the following function: void (i8* exn) nounwind noreturn This code is used only in C++. More... | |
| #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 IMAGE_TYPE | ( | ImgType, | |
| Id, | |||
| SingletonId, | |||
| Access, | |||
| Suffix | |||
| ) | case BuiltinType::Id: |
| #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 | |||
| ) |
|
strong |
Definition at line 3543 of file ItaniumCXXABI.cpp.
|
static |
Emits a call to __cxa_begin_catch and enters a cleanup to call __cxa_end_catch.
| EndMightThrow | - true if __cxa_end_catch might throw |
Definition at line 3723 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::EHStack, clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall(), getBeginCatchFn(), and clang::CodeGen::NormalAndEHCleanup.
Referenced by InitCatchParam().
|
static |
Definition at line 2793 of file ItaniumCXXABI.cpp.
References clang::AS_public, clang::CXXRecordDecl::bases_begin(), clang::CXXBaseSpecifier::getAccessSpecifier(), clang::Type::getAs(), clang::CXXRecordDecl::getNumBases(), clang::CXXBaseSpecifier::getType(), clang::CXXRecordDecl::isDynamicClass(), clang::CXXRecordDecl::isEmpty(), and clang::CXXBaseSpecifier::isVirtual().
|
static |
Compute the src2dst_offset hint as described in the Itanium C++ ABI [2.9.7].
Definition at line 1167 of file ItaniumCXXABI.cpp.
References clang::AS_public, clang::CharUnits::fromQuantity(), clang::ASTContext::getASTRecordLayout(), clang::ASTRecordLayout::getBaseClassOffset(), and clang::CXXRecordDecl::isDerivedFrom().
|
static |
ComputeVMIClassTypeInfoFlags - Compute the value of the flags member in abi::__vmi_class_type_info.
Definition at line 3259 of file ItaniumCXXABI.cpp.
References clang::CXXRecordDecl::bases(), clang::Type::getAs(), clang::CXXBaseSpecifier::getType(), I, and clang::CXXBaseSpecifier::isVirtual().
Referenced by ComputeVMIClassTypeInfoFlags().
|
static |
Definition at line 3296 of file ItaniumCXXABI.cpp.
References clang::CXXRecordDecl::bases(), ComputeVMIClassTypeInfoFlags(), and I.
ContainsIncompleteClassType - Returns whether the given type contains an incomplete class type.
This is true if
Definition at line 2768 of file ItaniumCXXABI.cpp.
References IsIncompleteClassType().
Referenced by extractPBaseFlags(), and getTypeInfoLinkage().
|
static |
Definition at line 3582 of file ItaniumCXXABI.cpp.
References clang::serialized_diags::create(), clang::CodeGen::CodeGenModule::GetAddrOfGlobal(), clang::GlobalDecl::getDecl(), clang::CodeGen::CodeGenModule::getFunctionLinkage(), clang::CodeGen::CodeGenModule::GetGlobalValue(), clang::CodeGen::CodeGenModule::getMangledName(), and clang::CodeGen::CodeGenModule::setAliasAttributes().
|
static |
Register a global destructor using __cxa_atexit.
Definition at line 2159 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenModule::CreateRuntimeVariable(), clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall(), clang::CodeGen::CodeGenFunction::getTarget(), clang::TargetInfo::getTriple(), clang::HiddenVisibility, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::Int8Ty, clang::CodeGen::CodeGenTypeCache::IntTy, clang::CodeGen::Type, and clang::CodeGen::CodeGenTypeCache::VoidTy.
|
static |
Compute the flags for a __pbase_type_info, and remove the corresponding pieces from Type.
Definition at line 3396 of file ItaniumCXXABI.cpp.
References ContainsIncompleteClassType(), clang::EST_None, clang::Type::getAs(), clang::ASTContext::getFunctionType(), clang::QualType::getUnqualifiedType(), clang::QualType::isConstQualified(), clang::QualType::isRestrictQualified(), and clang::QualType::isVolatileQualified().
|
static |
Definition at line 1082 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::CodeGenTypeCache::SizeTy.
|
static |
Definition at line 1159 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), and clang::CodeGen::CodeGenTypeCache::VoidTy.
|
static |
Definition at line 1217 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), and clang::CodeGen::CodeGenTypeCache::VoidTy.
|
static |
Definition at line 3667 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by CallBeginCatch(), and getClangCallTerminateFn().
|
static |
Get or define the following function: void (i8* exn) nounwind noreturn This code is used only in C++.
Definition at line 3955 of file ItaniumCXXABI.cpp.
References clang::Create(), clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), getBeginCatchFn(), clang::CodeGen::CodeGenModule::getLLVMContext(), clang::CodeGen::CodeGenModule::getModule(), clang::CodeGen::CodeGenTypeCache::getRuntimeCC(), clang::CodeGen::CodeGenModule::getTerminateFn(), clang::HiddenVisibility, clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenModule::supportsCOMDAT(), and clang::CodeGen::CodeGenTypeCache::VoidTy.
|
static |
Definition at line 3545 of file ItaniumCXXABI.cpp.
References clang::Ctor_Complete, clang::Dtor_Complete, clang::CodeGen::CodeGenModule::getCodeGenOpts(), clang::CodeGen::CodeGenModule::getFunctionLinkage(), clang::CXXRecordDecl::getNumVBases(), clang::CXXMethodDecl::getParent(), clang::CodeGen::CodeGenModule::getTarget(), and clang::TargetInfo::getTriple().
|
static |
Definition at line 3675 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), and clang::CodeGen::CodeGenTypeCache::VoidTy.
|
static |
Definition at line 3683 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), and clang::CodeGen::CodeGenTypeCache::Int8PtrTy.
Referenced by InitCatchParam().
|
static |
Definition at line 1948 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenModule::getLLVMContext(), and clang::CodeGen::CodeGenTypeCache::VoidTy.
|
static |
Definition at line 1923 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenTypes::ConvertType(), clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenModule::getLLVMContext(), clang::CodeGen::CodeGenModule::getTypes(), and clang::ASTContext::IntTy.
|
static |
Definition at line 1936 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenModule::getLLVMContext(), and clang::CodeGen::CodeGenTypeCache::VoidTy.
|
static |
Definition at line 1136 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::ASTContext::getPointerDiffType(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, and clang::CodeGen::Type.
|
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 2234 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenModule::getLLVMLinkageVarDefinition(), and isThreadWrapperReplaceable().
|
static |
Definition at line 1091 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::Type, and clang::CodeGen::CodeGenTypeCache::VoidTy.
|
static |
Return the linkage that the type info and type info name constants should have for the given type.
Definition at line 2947 of file ItaniumCXXABI.cpp.
References ContainsIncompleteClassType(), clang::ExternalLinkage, clang::CodeGen::CodeGenModule::getLangOpts(), clang::Type::getLinkage(), clang::CodeGen::CodeGenModule::getTriple(), clang::CodeGen::CodeGenModule::getVTableLinkage(), clang::Decl::hasAttr(), clang::InternalLinkage, clang::CXXRecordDecl::isDynamicClass(), clang::ModuleInternalLinkage, clang::ModuleLinkage, clang::NoLinkage, ShouldUseExternalRTTIDescriptor(), clang::UniqueExternalLinkage, and clang::VisibleNoLinkage.
|
static |
A "special initializer" callback for initializing a catch parameter during catch initialization.
Definition at line 3736 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenFunction::Builder, CallBeginCatch(), clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::ConvertTypeForMem(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CodeGenFunction::CreateTempAlloca(), clang::CodeGen::AggValueSlot::DoesNotNeedGCBarriers, clang::CodeGen::CodeGenFunction::EHStack, clang::CodeGen::CodeGenFunction::EmitAggExpr(), clang::CodeGen::CodeGenFunction::EmitAggregateCopy(), clang::CodeGen::CodeGenFunction::EmitARCInitWeak(), clang::CodeGen::CodeGenFunction::EmitARCRetainNonBlock(), clang::CodeGen::CodeGenFunction::EmitLoadOfComplex(), clang::CodeGen::CodeGenFunction::EmitLoadOfScalar(), clang::CodeGen::CodeGenFunction::EmitNounwindRuntimeCall(), clang::CodeGen::CodeGenFunction::EmitStoreOfComplex(), clang::CodeGen::CodeGenFunction::EmitStoreOfScalar(), clang::OpaqueValueExpr::findInCopyConstruct(), clang::CodeGen::AggValueSlot::forAddr(), clang::ASTContext::getCanonicalType(), clang::CodeGen::CodeGenModule::getClassPointerAlignment(), clang::CodeGen::CodeGenModule::getContext(), clang::CodeGen::CodeGenFunction::getEvaluationKind(), clang::CodeGen::CodeGenFunction::getExceptionFromSlot(), getGetExceptionPtrFn(), clang::VarDecl::getInit(), clang::Qualifiers::getObjCLifetime(), clang::Type::getPointeeType(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::CanQual< T >::getQualifiers(), clang::CodeGen::TargetCodeGenInfo::getSizeOfUnwindException(), clang::CodeGen::CodeGenModule::getTargetCodeGenInfo(), clang::ValueDecl::getType(), clang::CodeGen::AggValueSlot::IsNotAliased, clang::CodeGen::AggValueSlot::IsNotDestructed, clang::Type::isRecordType(), clang::CodeGen::CodeGenFunction::MakeAddrLValue(), clang::CodeGen::CodeGenFunction::MakeNaturalAlignAddrLValue(), clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, clang::CodeGen::EHScopeStack::popTerminate(), clang::CodeGen::EHScopeStack::pushTerminate(), clang::CodeGen::TEK_Aggregate, clang::CodeGen::TEK_Complex, clang::CodeGen::TEK_Scalar, and clang::CodeGen::Type.
|
static |
IsIncompleteClassType - Returns whether the given record type is incomplete.
Definition at line 2753 of file 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 2702 of file ItaniumCXXABI.cpp.
References TypeInfoIsInStandardLibrary().
|
static |
Definition at line 2221 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenModule::getTarget(), clang::VarDecl::getTLSKind(), clang::TargetInfo::getTriple(), clang::VarDecl::isStaticLocal(), and clang::VarDecl::TLS_Dynamic.
Referenced by getThreadLocalWrapperLinkage().
|
static |
Definition at line 1712 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::ConvertType(), clang::CodeGen::CGBuilderTy::CreateAlignedLoad(), clang::CodeGen::CGBuilderTy::CreateBitCast(), clang::CodeGen::CGBuilderTy::CreateConstInBoundsByteGEP(), clang::CodeGen::CGBuilderTy::CreateElementBitCast(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CharUnits::fromQuantity(), clang::CodeGen::CodeGenFunction::getContext(), clang::CodeGen::Address::getPointer(), clang::CodeGen::CodeGenTypeCache::getPointerAlign(), clang::ASTContext::getPointerDiffType(), clang::CodeGen::Address::getType(), clang::CodeGen::CodeGenTypeCache::Int8PtrTy, clang::CodeGen::CodeGenTypeCache::Int8Ty, and clang::CodeGen::Type.
|
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 2719 of file ItaniumCXXABI.cpp.
References clang::CodeGen::CodeGenModule::getContext(), clang::ASTContext::getLangOpts(), clang::CodeGen::CodeGenModule::getTriple(), clang::CodeGen::CodeGenModule::getVTables(), clang::Decl::hasAttr(), clang::CXXRecordDecl::hasDefinition(), clang::CXXRecordDecl::isDynamicClass(), and clang::CodeGen::CodeGenVTables::isVTableExternal().
Referenced by getTypeInfoLinkage().
|
static |
TypeInfoIsInStandardLibrary - Given a builtin type, returns whether the type info for that type is defined in the standard library.
Definition at line 2614 of file ItaniumCXXABI.cpp.
References clang::BuiltinType::getKind().
Referenced by IsStandardLibraryRTTIDescriptor(), and TypeInfoIsInStandardLibrary().
|
static |
Definition at line 2684 of file ItaniumCXXABI.cpp.
References clang::Qualifiers::empty(), clang::PointerType::getPointeeType(), clang::QualType::getQualifiers(), clang::Qualifiers::removeConst(), and TypeInfoIsInStandardLibrary().
1.8.6