clang API Documentation

Defines | Functions
CGRTTI.cpp File Reference
#include "CodeGenModule.h"
#include "CGCXXABI.h"
#include "clang/AST/RecordLayout.h"
#include "clang/AST/Type.h"
#include "clang/Frontend/CodeGenOptions.h"
#include "CGObjCRuntime.h"
#include "clang/AST/BuiltinTypes.def"
#include "clang/AST/TypeNodes.def"
Include dependency graph for CGRTTI.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:

Functions

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
llvm::GlobalVariable::LinkageTypes 
getTypeInfoLinkage (CodeGenModule &CGM, QualType Ty)
static bool CanUseSingleInheritance (const CXXRecordDecl *RD)
static void maybeUpdateRTTILinkage (CodeGenModule &CGM, llvm::GlobalVariable *GV, QualType Ty)
static unsigned ComputeQualifierFlags (Qualifiers Quals)
static unsigned ComputeVMIClassTypeInfoFlags (const CXXBaseSpecifier *Base, SeenBases &Bases)
static unsigned ComputeVMIClassTypeInfoFlags (const CXXRecordDecl *RD)

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 
)

Function Documentation

static bool CanUseSingleInheritance ( const CXXRecordDecl RD) [static]
static unsigned ComputeQualifierFlags ( Qualifiers  Quals) [static]

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

Definition at line 716 of file CGRTTI.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 776 of file CGRTTI.cpp.

References clang::CXXRecordDecl::bases_begin(), clang::CXXRecordDecl::bases_end(), 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 286 of file CGRTTI.cpp.

References IsIncompleteClassType().

Referenced by getTypeInfoLinkage().

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 271 of file CGRTTI.cpp.

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

Referenced by ContainsIncompleteClassType().

static bool IsStandardLibraryRTTIDescriptor ( QualType  Ty) [static]

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

Definition at line 233 of file CGRTTI.cpp.

References TypeInfoIsInStandardLibrary().

static void maybeUpdateRTTILinkage ( CodeGenModule CGM,
llvm::GlobalVariable *  GV,
QualType  Ty 
) [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 250 of file CGRTTI.cpp.

References clang::CodeGen::CodeGenModule::getContext(), clang::ASTContext::getLangOptions(), clang::CodeGen::CodeGenModule::getVTables(), clang::CXXRecordDecl::hasDefinition(), clang::CXXRecordDecl::isDynamicClass(), and clang::CodeGen::CodeGenVTables::ShouldEmitVTableInThisTU().

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 161 of file CGRTTI.cpp.

References clang::BuiltinType::getKind().

Referenced by IsStandardLibraryRTTIDescriptor(), and TypeInfoIsInStandardLibrary().

static bool TypeInfoIsInStandardLibrary ( const PointerType PointerTy) [static]