clang 22.0.0git
RecordLayoutBuilder.cpp File Reference
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTDiagnostic.h"
#include "clang/AST/Attr.h"
#include "clang/AST/CXXInheritance.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/Expr.h"
#include "clang/AST/RecordLayout.h"
#include "clang/AST/VTableBuilder.h"
#include "clang/Basic/TargetInfo.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/MathExtras.h"

Go to the source code of this file.

Functions

static uint64_t roundUpSizeToCharAlignment (uint64_t Size, const ASTContext &Context)
static bool isAIXLayout (const ASTContext &Context)
static unsigned getPaddingDiagFromTagKind (TagTypeKind Tag)
 Get diagnostic select index for tag kind for field padding diagnostic message.
static void CheckFieldPadding (const ASTContext &Context, bool IsUnion, uint64_t Offset, uint64_t UnpaddedOffset, const FieldDecl *D)
static const CXXMethodDeclcomputeKeyFunction (ASTContext &Context, const CXXRecordDecl *RD)
static bool mustSkipTailPadding (TargetCXXABI ABI, const CXXRecordDecl *RD)
 Does the target C++ ABI require us to skip over the tail-padding of the given class (considering it as a base class) when allocating objects?
static bool recordUsesEBO (const RecordDecl *RD)
static bool RequiresVtordisp (const llvm::SmallPtrSetImpl< const CXXRecordDecl * > &BasesWithOverriddenMethods, const CXXRecordDecl *RD)
static uint64_t getFieldOffset (const ASTContext &C, const FieldDecl *FD)
static void PrintOffset (raw_ostream &OS, CharUnits Offset, unsigned IndentLevel)
static void PrintBitFieldOffset (raw_ostream &OS, CharUnits Offset, unsigned Begin, unsigned Width, unsigned IndentLevel)
static void PrintIndentNoOffset (raw_ostream &OS, unsigned IndentLevel)
static void DumpRecordLayout (raw_ostream &OS, const RecordDecl *RD, const ASTContext &C, CharUnits Offset, unsigned IndentLevel, const char *Description, bool PrintSizeInfo, bool IncludeVirtualBases)

Function Documentation

◆ CheckFieldPadding()

◆ computeKeyFunction()

◆ DumpRecordLayout()

◆ getFieldOffset()

◆ getPaddingDiagFromTagKind()

unsigned getPaddingDiagFromTagKind ( TagTypeKind Tag)
static

Get diagnostic select index for tag kind for field padding diagnostic message.

WARNING: Indexes apply to particular diagnostics only!

Returns
diagnostic select index.

Definition at line 2264 of file RecordLayoutBuilder.cpp.

References clang::Class, clang::Interface, and clang::Struct.

Referenced by CheckFieldPadding().

◆ isAIXLayout()

bool isAIXLayout ( const ASTContext & Context)
static

Definition at line 1528 of file RecordLayoutBuilder.cpp.

◆ mustSkipTailPadding()

bool mustSkipTailPadding ( TargetCXXABI ABI,
const CXXRecordDecl * RD )
static

◆ PrintBitFieldOffset()

void PrintBitFieldOffset ( raw_ostream & OS,
CharUnits Offset,
unsigned Begin,
unsigned Width,
unsigned IndentLevel )
static

Definition at line 3597 of file RecordLayoutBuilder.cpp.

References IndentLevel.

Referenced by DumpRecordLayout().

◆ PrintIndentNoOffset()

void PrintIndentNoOffset ( raw_ostream & OS,
unsigned IndentLevel )
static

Definition at line 3615 of file RecordLayoutBuilder.cpp.

References IndentLevel.

Referenced by DumpRecordLayout().

◆ PrintOffset()

void PrintOffset ( raw_ostream & OS,
CharUnits Offset,
unsigned IndentLevel )
static

Definition at line 3591 of file RecordLayoutBuilder.cpp.

References IndentLevel.

Referenced by DumpRecordLayout().

◆ recordUsesEBO()

bool recordUsesEBO ( const RecordDecl * RD)
static

◆ RequiresVtordisp()

bool RequiresVtordisp ( const llvm::SmallPtrSetImpl< const CXXRecordDecl * > & BasesWithOverriddenMethods,
const CXXRecordDecl * RD )
static

Definition at line 3281 of file RecordLayoutBuilder.cpp.

References clang::CXXRecordDecl::bases(), and RequiresVtordisp().

Referenced by RequiresVtordisp().

◆ roundUpSizeToCharAlignment()

uint64_t roundUpSizeToCharAlignment ( uint64_t Size,
const ASTContext & Context )
static

Definition at line 1452 of file RecordLayoutBuilder.cpp.