#include ">

clang: lib/AST/VTableBuilder.cpp File Reference (original) (raw)

#include "[clang/AST/VTableBuilder.h](VTableBuilder%5F8h%5Fsource.html)"
#include "[clang/AST/ASTContext.h](ASTContext%5F8h%5Fsource.html)"
#include "[clang/AST/ASTDiagnostic.h](ASTDiagnostic%5F8h%5Fsource.html)"
#include "[clang/AST/CXXInheritance.h](CXXInheritance%5F8h%5Fsource.html)"
#include "[clang/AST/RecordLayout.h](RecordLayout%5F8h%5Fsource.html)"
#include "[clang/Basic/TargetInfo.h](include%5F2clang%5F2Basic%5F2TargetInfo%5F8h%5Fsource.html)"
#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.

Functions
static VTableLayout::AddressPointsIndexMapTy MakeAddressPointIndices (const VTableLayout::AddressPointsMapTy &addressPoints, unsigned numVTables)
static std::unique_ptr< VTableLayout > CreateVTableLayout (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)

DUMP_OVERRIDERS

#define DUMP_OVERRIDERS 0

computeFullPathsForVFTables()

CreateVTableLayout()

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

dumpMicrosoftThunkAdjustment()

static void dumpMicrosoftThunkAdjustment ( const ThunkInfo & TI, raw_ostream & Out, bool ContinueFirstLine ) static

Definition at line 3205 of file VTableBuilder.cpp.

References clang::QualType::getCanonicalType(), clang::FunctionDecl::getReturnType(), clang::ReturnAdjustment::isEmpty(), clang::ThisAdjustment::VirtualAdjustment::isEmpty(), clang::ThunkInfo::Method, clang::ReturnAdjustment::VirtualAdjustment::Microsoft, clang::ReturnAdjustment::NonVirtual, clang::ThunkInfo::Return, clang::T, clang::ThunkInfo::This, clang::ReturnAdjustment::VirtualAdjustment::VBIndex, clang::ReturnAdjustment::VirtualAdjustment::VBPtrOffset, clang::ReturnAdjustment::Virtual, and clang::ThisAdjustment::Virtual.

extendPath()

findPathsToSubobject()

getOffsetOfFullPath()

GroupNewVirtualOverloads()

isDirectVBase()

MakeAddressPointIndices()

PrintBasePath()

rebucketPaths()

removeRedundantPaths()

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

selectBestPath()

static const FullPathTy * selectBestPath ( ASTContext & Context, const CXXRecordDecl * RD, const VPtrInfo & Info, std::list< FullPathTy > & FullPaths ) static

Definition at line 3591 of file VTableBuilder.cpp.

References clang::BaseSubobject::getBase(), clang::CXXMethodDecl::getCanonicalDecl(), clang::ASTContext::getDiagnostics(), clang::Decl::getLocation(), getOffsetOfFullPath(), clang::CXXMethodDecl::getParent(), clang::VTableContextBase::hasVtableSlot(), clang::VPtrInfo::IntroducingObject, clang::CXXRecordDecl::methods(), clang::DiagnosticsEngine::Report(), and clang::CharUnits::Zero().

Referenced by computeFullPathsForVFTables().

setsIntersect()

vfptrIsEarlierInMDC()