clang 22.0.0git
Functions
Descriptor.cpp File Reference
#include "Descriptor.h"
#include "Boolean.h"
#include "FixedPoint.h"
#include "Floating.h"
#include "IntegralAP.h"
#include "MemberPointer.h"
#include "Pointer.h"
#include "PrimType.h"
#include "Record.h"
#include "Source.h"
#include "clang/AST/ExprCXX.h"

Go to the source code of this file.

Functions

template<typename T >
static constexpr bool needsCtor ()
 
template<typename T >
static void ctorTy (Block *, std::byte *Ptr, bool, bool, bool, bool, bool, const Descriptor *)
 
template<typename T >
static void dtorTy (Block *, std::byte *Ptr, const Descriptor *)
 
template<typename T >
static void ctorArrayTy (Block *, std::byte *Ptr, bool, bool, bool, bool, bool, const Descriptor *D)
 
template<typename T >
static void dtorArrayTy (Block *, std::byte *Ptr, const Descriptor *D)
 
static void ctorArrayDesc (Block *B, std::byte *Ptr, bool IsConst, bool IsMutable, bool IsVolatile, bool IsActive, bool InUnion, const Descriptor *D)
 
static void dtorArrayDesc (Block *B, std::byte *Ptr, const Descriptor *D)
 
static void initField (Block *B, std::byte *Ptr, bool IsConst, bool IsMutable, bool IsVolatile, bool IsActive, bool IsUnionField, bool InUnion, const Descriptor *D, unsigned FieldOffset)
 
static void initBase (Block *B, std::byte *Ptr, bool IsConst, bool IsMutable, bool IsVolatile, bool IsActive, bool InUnion, const Descriptor *D, unsigned FieldOffset, bool IsVirtualBase)
 
static void ctorRecord (Block *B, std::byte *Ptr, bool IsConst, bool IsMutable, bool IsVolatile, bool IsActive, bool InUnion, const Descriptor *D)
 
static void destroyField (Block *B, std::byte *Ptr, const Descriptor *D, unsigned FieldOffset)
 
static void destroyBase (Block *B, std::byte *Ptr, const Descriptor *D, unsigned FieldOffset)
 
static void dtorRecord (Block *B, std::byte *Ptr, const Descriptor *D)
 
static bool needsRecordDtor (const Record *R)
 Whether a record needs its descriptor dtor function called.
 
static BlockCtorFn getCtorPrim (PrimType T)
 
static BlockDtorFn getDtorPrim (PrimType T)
 
static BlockCtorFn getCtorArrayPrim (PrimType Type)
 
static BlockDtorFn getDtorArrayPrim (PrimType Type)
 

Function Documentation

◆ ctorArrayDesc()

static void ctorArrayDesc ( Block B,
std::byte *  Ptr,
bool  IsConst,
bool  IsMutable,
bool  IsVolatile,
bool  IsActive,
bool  InUnion,
const Descriptor D 
)
static

Definition at line 80 of file Descriptor.cpp.

References D, and clang::interp::Fn.

◆ ctorArrayTy()

template<typename T >
static void ctorArrayTy ( Block ,
std::byte *  Ptr,
bool  ,
bool  ,
bool  ,
bool  ,
bool  ,
const Descriptor D 
)
static

Definition at line 53 of file Descriptor.cpp.

References D, clang::interp::NE(), and clang::T.

◆ ctorRecord()

static void ctorRecord ( Block B,
std::byte *  Ptr,
bool  IsConst,
bool  IsMutable,
bool  IsVolatile,
bool  IsActive,
bool  InUnion,
const Descriptor D 
)
static

Definition at line 177 of file Descriptor.cpp.

References D, initBase(), initField(), and V.

◆ ctorTy()

template<typename T >
static void ctorTy ( Block ,
std::byte *  Ptr,
bool  ,
bool  ,
bool  ,
bool  ,
bool  ,
const Descriptor  
)
static

Definition at line 40 of file Descriptor.cpp.

References clang::T.

◆ destroyBase()

static void destroyBase ( Block B,
std::byte *  Ptr,
const Descriptor D,
unsigned  FieldOffset 
)
static

Definition at line 201 of file Descriptor.cpp.

References D, destroyBase(), destroyField(), and V.

Referenced by destroyBase(), and dtorRecord().

◆ destroyField()

static void destroyField ( Block B,
std::byte *  Ptr,
const Descriptor D,
unsigned  FieldOffset 
)
static

Definition at line 195 of file Descriptor.cpp.

References D, and clang::interp::Fn.

Referenced by destroyBase(), and dtorRecord().

◆ dtorArrayDesc()

static void dtorArrayDesc ( Block B,
std::byte *  Ptr,
const Descriptor D 
)
static

Definition at line 111 of file Descriptor.cpp.

References D.

◆ dtorArrayTy()

template<typename T >
static void dtorArrayTy ( Block ,
std::byte *  Ptr,
const Descriptor D 
)
static

Definition at line 66 of file Descriptor.cpp.

References D, clang::interp::NE(), and clang::T.

◆ dtorRecord()

static void dtorRecord ( Block B,
std::byte *  Ptr,
const Descriptor D 
)
static

Definition at line 212 of file Descriptor.cpp.

References D, destroyBase(), and destroyField().

◆ dtorTy()

template<typename T >
static void dtorTy ( Block ,
std::byte *  Ptr,
const Descriptor  
)
static

Definition at line 47 of file Descriptor.cpp.

References clang::T.

Referenced by emitGlobalDtorWithCXAAtExit().

◆ getCtorArrayPrim()

static BlockCtorFn getCtorArrayPrim ( PrimType  Type)
static

Definition at line 276 of file Descriptor.cpp.

References TYPE_SWITCH.

◆ getCtorPrim()

static BlockCtorFn getCtorPrim ( PrimType  T)
static

◆ getDtorArrayPrim()

static BlockDtorFn getDtorArrayPrim ( PrimType  Type)
static

Definition at line 281 of file Descriptor.cpp.

References TYPE_SWITCH.

◆ getDtorPrim()

static BlockDtorFn getDtorPrim ( PrimType  T)
static

◆ initBase()

static void initBase ( Block B,
std::byte *  Ptr,
bool  IsConst,
bool  IsMutable,
bool  IsVolatile,
bool  IsActive,
bool  InUnion,
const Descriptor D,
unsigned  FieldOffset,
bool  IsVirtualBase 
)
static

Definition at line 149 of file Descriptor.cpp.

References D, initBase(), initField(), clang::interp::InlineDescriptor::Offset, and V.

Referenced by ctorRecord(), and initBase().

◆ initField()

static void initField ( Block B,
std::byte *  Ptr,
bool  IsConst,
bool  IsMutable,
bool  IsVolatile,
bool  IsActive,
bool  IsUnionField,
bool  InUnion,
const Descriptor D,
unsigned  FieldOffset 
)
static

Definition at line 128 of file Descriptor.cpp.

References D, clang::interp::Fn, and clang::interp::InlineDescriptor::Offset.

Referenced by ctorRecord(), and initBase().

◆ needsCtor()

template<typename T >
static constexpr bool needsCtor ( )
staticconstexpr

Definition at line 24 of file Descriptor.cpp.

◆ needsRecordDtor()

static bool needsRecordDtor ( const Record R)
static

Whether a record needs its descriptor dtor function called.

Definition at line 222 of file Descriptor.cpp.

References clang::interp::Record::bases(), clang::interp::Record::fields(), V, and clang::interp::Record::virtual_bases().