clang 22.0.0git
VTableBuilder.cpp File Reference
#include "clang/AST/VTableBuilder.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTDiagnostic.h"
#include "clang/AST/CXXInheritance.h"
#include "clang/AST/RecordLayout.h"
#include "clang/Basic/TargetInfo.h"
#include "llvm/ADT/SetOperations.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cstdio>

Go to the source code of this file.

Macros

#define DUMP_OVERRIDERS   0

Functions

static VTableLayout::AddressPointsIndexMapTy MakeAddressPointIndices (const VTableLayout::AddressPointsMapTy &addressPoints, unsigned numVTables)
static std::unique_ptr< VTableLayoutCreateVTableLayout (const ItaniumVTableBuilder &Builder)
static void GroupNewVirtualOverloads (const CXXRecordDecl *RD, SmallVector< const CXXMethodDecl *, 10 > &VirtualMethods)
static bool isDirectVBase (const CXXRecordDecl *Base, const CXXRecordDecl *RD)
static void PrintBasePath (const VPtrInfo::BasePath &Path, raw_ostream &Out)
static void dumpMicrosoftThunkAdjustment (const ThunkInfo &TI, raw_ostream &Out, bool ContinueFirstLine)
static bool setsIntersect (const llvm::SmallPtrSet< const CXXRecordDecl *, 4 > &A, ArrayRef< const CXXRecordDecl * > B)
static bool rebucketPaths (VPtrInfoVector &Paths)
static bool extendPath (VPtrInfo &P)
static void findPathsToSubobject (ASTContext &Context, const ASTRecordLayout &MostDerivedLayout, const CXXRecordDecl *RD, CharUnits Offset, BaseSubobject IntroducingObject, FullPathTy &FullPath, std::list< FullPathTy > &Paths)
static void removeRedundantPaths (std::list< FullPathTy > &FullPaths)
static CharUnits getOffsetOfFullPath (ASTContext &Context, const CXXRecordDecl *RD, const FullPathTy &FullPath)
static const FullPathTy * selectBestPath (ASTContext &Context, const CXXRecordDecl *RD, const VPtrInfo &Info, std::list< FullPathTy > &FullPaths)
static void computeFullPathsForVFTables (ASTContext &Context, const CXXRecordDecl *RD, VPtrInfoVector &Paths)
static bool vfptrIsEarlierInMDC (const ASTRecordLayout &Layout, const MethodVFTableLocation &LHS, const MethodVFTableLocation &RHS)

Macro Definition Documentation

◆ DUMP_OVERRIDERS

#define DUMP_OVERRIDERS   0

Definition at line 29 of file VTableBuilder.cpp.

Function Documentation

◆ computeFullPathsForVFTables()

void computeFullPathsForVFTables ( ASTContext & Context,
const CXXRecordDecl * RD,
VPtrInfoVector & Paths )
static

◆ CreateVTableLayout()

std::unique_ptr< VTableLayout > CreateVTableLayout ( const ItaniumVTableBuilder & Builder)
static

◆ dumpMicrosoftThunkAdjustment()

◆ extendPath()

bool extendPath ( VPtrInfo & P)
static

Definition at line 3472 of file VTableBuilder.cpp.

References clang::VPtrInfo::MangledPath, and clang::VPtrInfo::NextBaseToMangle.

Referenced by rebucketPaths().

◆ findPathsToSubobject()

void findPathsToSubobject ( ASTContext & Context,
const ASTRecordLayout & MostDerivedLayout,
const CXXRecordDecl * RD,
CharUnits Offset,
BaseSubobject IntroducingObject,
FullPathTy & FullPath,
std::list< FullPathTy > & Paths )
static

◆ getOffsetOfFullPath()

◆ GroupNewVirtualOverloads()

void GroupNewVirtualOverloads ( const CXXRecordDecl * RD,
SmallVector< const CXXMethodDecl *, 10 > & VirtualMethods )
static

◆ isDirectVBase()

bool isDirectVBase ( const CXXRecordDecl * Base,
const CXXRecordDecl * RD )
static

Definition at line 3034 of file VTableBuilder.cpp.

References clang::CXXRecordDecl::bases().

◆ MakeAddressPointIndices()

VTableLayout::AddressPointsIndexMapTy MakeAddressPointIndices ( const VTableLayout::AddressPointsMapTy & addressPoints,
unsigned numVTables )
static

Definition at line 2284 of file VTableBuilder.cpp.

Referenced by clang::VTableLayout::VTableLayout().

◆ PrintBasePath()

void PrintBasePath ( const VPtrInfo::BasePath & Path,
raw_ostream & Out )
static

Definition at line 3201 of file VTableBuilder.cpp.

◆ rebucketPaths()

bool rebucketPaths ( VPtrInfoVector & Paths)
static

Definition at line 3481 of file VTableBuilder.cpp.

References extendPath(), and clang::VPtrInfo::MangledPath.

◆ removeRedundantPaths()

void removeRedundantPaths ( std::list< FullPathTy > & FullPaths)
static

Definition at line 3548 of file VTableBuilder.cpp.

Referenced by computeFullPathsForVFTables().

◆ selectBestPath()

◆ setsIntersect()

bool setsIntersect ( const llvm::SmallPtrSet< const CXXRecordDecl *, 4 > & A,
ArrayRef< const CXXRecordDecl * > B )
static

Definition at line 3363 of file VTableBuilder.cpp.

◆ vfptrIsEarlierInMDC()