clang 20.0.0git
Classes | Public Types | Public Member Functions | List of all members
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 = llvm::DenseMap< const Expr *, AllocationSite >::const_iterator
 Allocation site iterator.
 

Public Member Functions

 DynamicAllocator ()=default
 
 ~DynamicAllocator ()
 
void cleanup ()
 
unsigned getNumAllocations () const
 
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
 

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

using clang::interp::DynamicAllocator::const_virtual_iter = llvm::DenseMap<const Expr *, AllocationSite>::const_iterator

Allocation site iterator.

Definition at line 91 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()

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

◆ ~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 54 of file DynamicAllocator.cpp.

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

◆ allocate() [2/3]

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

Allocate ONE element of the given descriptor.

Definition at line 65 of file DynamicAllocator.cpp.

References D, and clang::interp::Block::invokeCtor().

Referenced by allocate().

◆ 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 42 of file DynamicAllocator.cpp.

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

◆ allocation_sites()

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

◆ cleanup()

void DynamicAllocator::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 94 of file DynamicAllocator.cpp.

References clang::interp::Block::invokeDtor().

◆ 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 84 of file DynamicAllocator.h.

◆ getNumAllocations()

unsigned clang::interp::DynamicAllocator::getNumAllocations ( ) const
inline

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