clang  6.0.0svn
Classes | Public Types | Public Member Functions | Friends | List of all members
clang::ASTRecordLayout Class Reference

ASTRecordLayout - This class contains layout information for one RecordDecl, which is a struct/union/class. More...

#include "clang/AST/RecordLayout.h"

Classes

struct  VBaseInfo
 

Public Types

using VBaseOffsetsMapTy = llvm::DenseMap< const CXXRecordDecl *, VBaseInfo >
 

Public Member Functions

 ASTRecordLayout (const ASTRecordLayout &)=delete
 
ASTRecordLayoutoperator= (const ASTRecordLayout &)=delete
 
CharUnits getAlignment () const
 getAlignment - Get the record alignment in characters. More...
 
CharUnits getSize () const
 getSize - Get the record size in characters. More...
 
unsigned getFieldCount () const
 getFieldCount - Get the number of fields in the layout. More...
 
uint64_t getFieldOffset (unsigned FieldNo) const
 getFieldOffset - Get the offset of the given field index, in bits. More...
 
CharUnits getDataSize () const
 getDataSize() - Get the record data size, which is the record size without tail padding, in characters. More...
 
CharUnits getNonVirtualSize () const
 getNonVirtualSize - Get the non-virtual size (in chars) of an object, which is the size of the object without virtual bases. More...
 
CharUnits getNonVirtualAlignment () const
 getNonVirtualSize - Get the non-virtual alignment (in chars) of an object, which is the alignment of the object without virtual bases. More...
 
const CXXRecordDeclgetPrimaryBase () const
 getPrimaryBase - Get the primary base for this record. More...
 
bool isPrimaryBaseVirtual () const
 isPrimaryBaseVirtual - Get whether the primary base for this record is virtual or not. More...
 
CharUnits getBaseClassOffset (const CXXRecordDecl *Base) const
 getBaseClassOffset - Get the offset, in chars, for the given base class. More...
 
CharUnits getVBaseClassOffset (const CXXRecordDecl *VBase) const
 getVBaseClassOffset - Get the offset, in chars, for the given base class. More...
 
CharUnits getSizeOfLargestEmptySubobject () const
 
bool hasOwnVFPtr () const
 hasOwnVFPtr - Does this class provide its own virtual-function table pointer, rather than inheriting one from a primary base class? If so, it is at offset zero. More...
 
bool hasExtendableVFPtr () const
 hasVFPtr - Does this class have a virtual function table pointer that can be extended by a derived class? This is synonymous with this class having a VFPtr at offset zero. More...
 
bool hasOwnVBPtr () const
 hasOwnVBPtr - Does this class provide its own virtual-base table pointer, rather than inheriting one from a primary base class? More...
 
bool hasVBPtr () const
 hasVBPtr - Does this class have a virtual function table pointer. More...
 
CharUnits getRequiredAlignment () const
 
bool endsWithZeroSizedObject () const
 
bool leadsWithZeroSizedBase () const
 
CharUnits getVBPtrOffset () const
 getVBPtrOffset - Get the offset for virtual base table pointer. More...
 
const CXXRecordDeclgetBaseSharingVBPtr () const
 
const VBaseOffsetsMapTygetVBaseOffsetsMap () const
 

Friends

class ASTContext
 

Detailed Description

ASTRecordLayout - This class contains layout information for one RecordDecl, which is a struct/union/class.

The decl represented must be a definition, not a forward declaration. This class is also used to contain layout information for one ObjCInterfaceDecl. FIXME - Find appropriate name. These objects are managed by ASTContext.

Definition at line 39 of file RecordLayout.h.

Member Typedef Documentation

◆ VBaseOffsetsMapTy

Definition at line 60 of file RecordLayout.h.

Constructor & Destructor Documentation

◆ ASTRecordLayout()

clang::ASTRecordLayout::ASTRecordLayout ( const ASTRecordLayout )
delete

Member Function Documentation

◆ endsWithZeroSizedObject()

bool clang::ASTRecordLayout::endsWithZeroSizedObject ( ) const
inline

Definition at line 285 of file RecordLayout.h.

Referenced by recordUsesEBO().

◆ getAlignment()

CharUnits clang::ASTRecordLayout::getAlignment ( ) const
inline

getAlignment - Get the record alignment in characters.

Definition at line 171 of file RecordLayout.h.

Referenced by clang::ASTContext::DumpRecordLayout(), clang::CodeGen::CodeGenModule::getClassPointerAlignment(), and clang::ASTContext::getDeclAlign().

◆ getBaseClassOffset()

CharUnits clang::ASTRecordLayout::getBaseClassOffset ( const CXXRecordDecl Base) const
inline

◆ getBaseSharingVBPtr()

const CXXRecordDecl* clang::ASTRecordLayout::getBaseSharingVBPtr ( ) const
inline

Definition at line 301 of file RecordLayout.h.

Referenced by clang::ASTContext::getOffsetOfBaseWithVBPtr().

◆ getDataSize()

CharUnits clang::ASTRecordLayout::getDataSize ( ) const
inline

getDataSize() - Get the record data size, which is the record size without tail padding, in characters.

Definition at line 187 of file RecordLayout.h.

Referenced by clang::ASTContext::DumpRecordLayout(), and clang::ASTContext::getTypeInfoDataSizeInChars().

◆ getFieldCount()

unsigned clang::ASTRecordLayout::getFieldCount ( ) const
inline

getFieldCount - Get the number of fields in the layout.

Definition at line 177 of file RecordLayout.h.

References clang::ASTVector< T >::size().

Referenced by clang::ASTContext::DumpRecordLayout(), clang::CodeGen::CodeGenFunction::EmitAsanPrologueOrEpilogue(), and isDesignatorAtObjectEnd().

◆ getFieldOffset()

uint64_t clang::ASTRecordLayout::getFieldOffset ( unsigned  FieldNo) const
inline

◆ getNonVirtualAlignment()

CharUnits clang::ASTRecordLayout::getNonVirtualAlignment ( ) const
inline

getNonVirtualSize - Get the non-virtual alignment (in chars) of an object, which is the alignment of the object without virtual bases.

Definition at line 201 of file RecordLayout.h.

Referenced by EmitNullBaseClassInitialization().

◆ getNonVirtualSize()

CharUnits clang::ASTRecordLayout::getNonVirtualSize ( ) const
inline

getNonVirtualSize - Get the non-virtual size (in chars) of an object, which is the size of the object without virtual bases.

Definition at line 193 of file RecordLayout.h.

Referenced by EmitNullBaseClassInitialization(), and recordUsesEBO().

◆ getPrimaryBase()

const CXXRecordDecl* clang::ASTRecordLayout::getPrimaryBase ( ) const
inline

getPrimaryBase - Get the primary base for this record.

Definition at line 208 of file RecordLayout.h.

Referenced by AddIndirectPrimaryBases(), clang::CodeGen::CGDebugInfo::completeUnusedClass(), and DumpRecordLayout().

◆ getRequiredAlignment()

CharUnits clang::ASTRecordLayout::getRequiredAlignment ( ) const
inline

Definition at line 281 of file RecordLayout.h.

Referenced by recordUsesEBO().

◆ getSize()

CharUnits clang::ASTRecordLayout::getSize ( ) const
inline

getSize - Get the record size in characters.

Definition at line 174 of file RecordLayout.h.

Referenced by clang::ASTContext::DumpRecordLayout(), and hasMRCWeakIvars().

◆ getSizeOfLargestEmptySubobject()

CharUnits clang::ASTRecordLayout::getSizeOfLargestEmptySubobject ( ) const
inline

Definition at line 238 of file RecordLayout.h.

◆ getVBaseClassOffset()

CharUnits clang::ASTRecordLayout::getVBaseClassOffset ( const CXXRecordDecl VBase) const
inline

◆ getVBaseOffsetsMap()

const VBaseOffsetsMapTy& clang::ASTRecordLayout::getVBaseOffsetsMap ( ) const
inline

Definition at line 306 of file RecordLayout.h.

Referenced by detectAmbiguousBases(), isDeletingDtor(), and RequiresVtordisp().

◆ getVBPtrOffset()

CharUnits clang::ASTRecordLayout::getVBPtrOffset ( ) const
inline

getVBPtrOffset - Get the offset for virtual base table pointer.

This is only meaningful with the Microsoft ABI.

Definition at line 296 of file RecordLayout.h.

Referenced by clang::CodeGen::swiftcall::SwiftAggLowering::addTypedData(), detectAmbiguousBases(), DumpRecordLayout(), emitCXXDestructor(), and emitRTtypeidCall().

◆ hasExtendableVFPtr()

bool clang::ASTRecordLayout::hasExtendableVFPtr ( ) const
inline

hasVFPtr - Does this class have a virtual function table pointer that can be extended by a derived class? This is synonymous with this class having a VFPtr at offset zero.

Definition at line 258 of file RecordLayout.h.

Referenced by RequiresVtordisp().

◆ hasOwnVBPtr()

bool clang::ASTRecordLayout::hasOwnVBPtr ( ) const
inline

hasOwnVBPtr - Does this class provide its own virtual-base table pointer, rather than inheriting one from a primary base class?

This implies that the ABI has no primary base class, meaning that it has no base classes that are suitable under the conditions of the ABI.

Definition at line 270 of file RecordLayout.h.

References hasVBPtr().

Referenced by clang::CodeGen::swiftcall::SwiftAggLowering::addTypedData(), and DumpRecordLayout().

◆ hasOwnVFPtr()

bool clang::ASTRecordLayout::hasOwnVFPtr ( ) const
inline

hasOwnVFPtr - Does this class provide its own virtual-function table pointer, rather than inheriting one from a primary base class? If so, it is at offset zero.

This implies that the ABI has no primary base class, meaning that it has no base classes that are suitable under the conditions of the ABI.

Definition at line 250 of file RecordLayout.h.

Referenced by clang::CodeGen::swiftcall::SwiftAggLowering::addTypedData(), and DumpRecordLayout().

◆ hasVBPtr()

bool clang::ASTRecordLayout::hasVBPtr ( ) const
inline

hasVBPtr - Does this class have a virtual function table pointer.

Definition at line 276 of file RecordLayout.h.

Referenced by hasOwnVBPtr().

◆ isPrimaryBaseVirtual()

bool clang::ASTRecordLayout::isPrimaryBaseVirtual ( ) const
inline

isPrimaryBaseVirtual - Get whether the primary base for this record is virtual or not.

Definition at line 216 of file RecordLayout.h.

Referenced by AddIndirectPrimaryBases(), and clang::CodeGen::CGDebugInfo::completeUnusedClass().

◆ leadsWithZeroSizedBase()

bool clang::ASTRecordLayout::leadsWithZeroSizedBase ( ) const
inline

Definition at line 289 of file RecordLayout.h.

Referenced by recordUsesEBO().

◆ operator=()

ASTRecordLayout& clang::ASTRecordLayout::operator= ( const ASTRecordLayout )
delete

Friends And Related Function Documentation

◆ ASTContext

friend class ASTContext
friend

Definition at line 63 of file RecordLayout.h.


The documentation for this class was generated from the following files: