clang 22.0.0git
clang::interp::DynamicAllocator Class Referencefinal

Manages dynamic memory allocations done during bytecode interpretation. More...

#include "/home/buildbot/as-worker-4/publish-doxygen-docs/llvm-project/clang/lib/AST/ByteCode/DynamicAllocator.h"

Public Types

enum class  Form : uint8_t { NonArray , Array , Operator }
using const_virtual_iter
 Allocation site iterator.

Public Member Functions

 DynamicAllocator ()=default
 DynamicAllocator (DynamicAllocator &)=delete
 DynamicAllocator (DynamicAllocator &&)=delete
 ~DynamicAllocator ()
void cleanup ()
Blockallocate (const Descriptor *D, unsigned EvalID, Form AllocForm)
 Allocate ONE element of the given descriptor.
Blockallocate (const Expr *Source, PrimType T, size_t NumElements, unsigned EvalID, Form AllocForm)
 Allocate NumElements primitive elements of the given type.
Blockallocate (const Descriptor *D, size_t NumElements, unsigned EvalID, Form AllocForm)
 Allocate NumElements elements of the given descriptor.
bool deallocate (const Expr *Source, const Block *BlockToDelete, InterpState &S)
 Deallocate the given source+block combination.
std::optional< FormgetAllocationForm (const Expr *Source) const
 Checks whether the allocation done at the given source is an array allocation.
llvm::iterator_range< const_virtual_iterallocation_sites () const
bool hasAllocations () const

Detailed Description

Manages dynamic memory allocations done during bytecode interpretation.

We manage allocations as a map from their new-expression to a list of allocations. This is called an AllocationSite. For each site, we record whether it was allocated using new or new[], the IsArrayAllocation flag.

For all array allocations, we need to allocate new Descriptor instances, so the DynamicAllocator has a llvm::BumpPtrAllocator similar to Program.

Definition at line 33 of file DynamicAllocator.h.

Member Typedef Documentation

◆ const_virtual_iter

Initial value:
llvm::DenseMap<const Expr *, AllocationSite>::const_iterator

Allocation site iterator.

Definition at line 95 of file DynamicAllocator.h.

Member Enumeration Documentation

◆ Form

enum class clang::interp::DynamicAllocator::Form : uint8_t
strong
Enumerator
NonArray 
Array 
Operator 

Definition at line 35 of file DynamicAllocator.h.

Constructor & Destructor Documentation

◆ DynamicAllocator() [1/3]

clang::interp::DynamicAllocator::DynamicAllocator ( )
default

◆ DynamicAllocator() [2/3]

clang::interp::DynamicAllocator::DynamicAllocator ( DynamicAllocator & )
delete

References DynamicAllocator().

◆ DynamicAllocator() [3/3]

clang::interp::DynamicAllocator::DynamicAllocator ( DynamicAllocator && )
delete

References DynamicAllocator(), and clang::T.

◆ ~DynamicAllocator()

DynamicAllocator::~DynamicAllocator ( )

Definition at line 16 of file DynamicAllocator.cpp.

References cleanup().

Member Function Documentation

◆ allocate() [1/3]

Block * DynamicAllocator::allocate ( const Descriptor * D,
size_t NumElements,
unsigned EvalID,
Form AllocForm )

Allocate NumElements elements of the given descriptor.

Definition at line 57 of file DynamicAllocator.cpp.

References allocate(), clang::interp::Descriptor::asExpr(), clang::interp::Descriptor::getMetadataSize(), and clang::interp::Descriptor::InlineDescMD.

◆ allocate() [2/3]

◆ allocate() [3/3]

Block * DynamicAllocator::allocate ( const Expr * Source,
PrimType T,
size_t NumElements,
unsigned EvalID,
Form AllocForm )

Allocate NumElements primitive elements of the given type.

Definition at line 45 of file DynamicAllocator.cpp.

References allocate(), clang::interp::Descriptor::InlineDescMD, and clang::T.

◆ allocation_sites()

llvm::iterator_range< const_virtual_iter > clang::interp::DynamicAllocator::allocation_sites ( ) const
inline

Definition at line 97 of file DynamicAllocator.h.

◆ cleanup()

◆ deallocate()

bool DynamicAllocator::deallocate ( const Expr * Source,
const Block * BlockToDelete,
InterpState & S )

Deallocate the given source+block combination.

Returns true if anything has been deallocatd, false otherwise.

Definition at line 118 of file DynamicAllocator.cpp.

References clang::interp::Block::hasPointers(), clang::interp::Block::invokeDtor(), clang::interp::Block::isDead(), and clang::interp::Block::isInitialized().

Referenced by clang::interp::Free(), and clang::interp::interp__builtin_operator_delete().

◆ getAllocationForm()

std::optional< Form > clang::interp::DynamicAllocator::getAllocationForm ( const Expr * Source) const
inline

Checks whether the allocation done at the given source is an array allocation.

Definition at line 88 of file DynamicAllocator.h.

Referenced by clang::interp::Free(), and clang::interp::interp__builtin_operator_delete().

◆ hasAllocations()

bool clang::interp::DynamicAllocator::hasAllocations ( ) const
inline

Definition at line 101 of file DynamicAllocator.h.


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