clang 22.0.0git
clang::CodeGen::EHCleanupScope Class Reference

A cleanup scope which generates the cleanup blocks lazily. More...

#include "/home/buildbot/as-worker-4/publish-doxygen-docs/llvm-project/clang/lib/CodeGen/CGCleanup.h"

Inheritance diagram for clang::CodeGen::EHCleanupScope:
[legend]

Public Member Functions

size_t getAllocatedSize () const
 EHCleanupScope (bool isNormal, bool isEH, unsigned cleanupSize, unsigned fixupDepth, EHScopeStack::stable_iterator enclosingNormal, EHScopeStack::stable_iterator enclosingEH)
void Destroy ()
void AddAuxAllocas (llvm::SmallVector< llvm::AllocaInst * > Allocas)
void MarkEmitted ()
 ~EHCleanupScope ()=delete
bool isNormalCleanup () const
llvm::BasicBlock * getNormalBlock () const
void setNormalBlock (llvm::BasicBlock *BB)
bool isEHCleanup () const
bool isActive () const
void setActive (bool A)
bool isLifetimeMarker () const
void setLifetimeMarker ()
bool isFakeUse () const
void setFakeUse ()
bool hasActiveFlag () const
Address getActiveFlag () const
void setActiveFlag (RawAddress Var)
void setTestFlagInNormalCleanup ()
bool shouldTestFlagInNormalCleanup () const
void setTestFlagInEHCleanup ()
bool shouldTestFlagInEHCleanup () const
unsigned getFixupDepth () const
EHScopeStack::stable_iterator getEnclosingNormalCleanup () const
size_t getCleanupSize () const
void * getCleanupBuffer ()
EHScopeStack::Cleanup * getCleanup ()
bool hasBranches () const
 True if this cleanup scope has any branch-afters or branch-throughs.
void addBranchAfter (llvm::ConstantInt *Index, llvm::BasicBlock *Block)
 Add a branch-after to this cleanup scope.
unsigned getNumBranchAfters () const
 Return the number of unique branch-afters on this scope.
llvm::BasicBlock * getBranchAfterBlock (unsigned I) const
llvm::ConstantInt * getBranchAfterIndex (unsigned I) const
bool addBranchThrough (llvm::BasicBlock *Block)
 Add a branch-through to this cleanup scope.
bool hasBranchThroughs () const
 Determines if this cleanup scope has any branch throughs.
Public Member Functions inherited from clang::CodeGen::EHScope
 EHScope (Kind kind, EHScopeStack::stable_iterator enclosingEHScope)
Kind getKind () const
llvm::BasicBlock * getCachedLandingPad () const
void setCachedLandingPad (llvm::BasicBlock *block)
llvm::BasicBlock * getCachedEHDispatchBlock () const
void setCachedEHDispatchBlock (llvm::BasicBlock *block)
bool hasEHBranches () const
EHScopeStack::stable_iterator getEnclosingEHScope () const

Static Public Member Functions

static size_t getSizeForCleanupSize (size_t Size)
 Gets the size required for a lazy cleanup scope with the given cleanup-data requirements.
static bool classof (const EHScope *Scope)

Additional Inherited Members

Public Types inherited from clang::CodeGen::EHScope
enum  Kind { Cleanup , Catch , Terminate , Filter }
Protected Attributes inherited from clang::CodeGen::EHScope
union { 
   CommonBitFields   CommonBits 
   CatchBitFields   CatchBits 
   CleanupBitFields   CleanupBits 
   FilterBitFields   FilterBits 
}; 

Detailed Description

A cleanup scope which generates the cleanup blocks lazily.

Definition at line 247 of file CGCleanup.h.

Constructor & Destructor Documentation

◆ EHCleanupScope()

clang::CodeGen::EHCleanupScope::EHCleanupScope ( bool isNormal,
bool isEH,
unsigned cleanupSize,
unsigned fixupDepth,
EHScopeStack::stable_iterator enclosingNormal,
EHScopeStack::stable_iterator enclosingEH )
inline

◆ ~EHCleanupScope()

clang::CodeGen::EHCleanupScope::~EHCleanupScope ( )
delete

Member Function Documentation

◆ AddAuxAllocas()

void clang::CodeGen::EHCleanupScope::AddAuxAllocas ( llvm::SmallVector< llvm::AllocaInst * > Allocas)
inline

Definition at line 372 of file CGCleanup.h.

◆ addBranchAfter()

void clang::CodeGen::EHCleanupScope::addBranchAfter ( llvm::ConstantInt * Index,
llvm::BasicBlock * Block )
inline

Add a branch-after to this cleanup scope.

A branch-after is a branch from a point protected by this (normal) cleanup to a point in the normal cleanup scope immediately containing it. For example, for (;;) { A a; break; } contains a branch-after.

Branch-afters each have their own destination out of the cleanup, guaranteed distinct from anything else threaded through it. Therefore branch-afters usually force a switch after the cleanup.

Definition at line 444 of file CGCleanup.h.

References clang::Block.

◆ addBranchThrough()

bool clang::CodeGen::EHCleanupScope::addBranchThrough ( llvm::BasicBlock * Block)
inline

Add a branch-through to this cleanup scope.

A branch-through is a branch from a scope protected by this (normal) cleanup to an enclosing scope other than the immediately-enclosing normal cleanup scope.

In the following example, the branch through B's scope is a branch-through, while the branch through A's scope is a branch-after: for (;;) { A a; B b; break; }

All branch-throughs have a common destination out of the cleanup, one possibly shared with the fall-through. Therefore branch-throughs usually don't force a switch after the cleanup.

Returns
true if the branch-through was new to this scope

Definition at line 481 of file CGCleanup.h.

References clang::Block.

◆ classof()

bool clang::CodeGen::EHCleanupScope::classof ( const EHScope * Scope)
inlinestatic

◆ Destroy()

void clang::CodeGen::EHCleanupScope::Destroy ( )
inline

Definition at line 367 of file CGCleanup.h.

◆ getActiveFlag()

Address clang::CodeGen::EHCleanupScope::getActiveFlag ( ) const
inline

Definition at line 396 of file CGCleanup.h.

◆ getAllocatedSize()

size_t clang::CodeGen::EHCleanupScope::getAllocatedSize ( ) const
inline

Definition at line 343 of file CGCleanup.h.

References clang::CodeGen::EHScope::CleanupBits, and EHCleanupScope().

◆ getBranchAfterBlock()

llvm::BasicBlock * clang::CodeGen::EHCleanupScope::getBranchAfterBlock ( unsigned I) const
inline

Definition at line 456 of file CGCleanup.h.

References getNumBranchAfters().

◆ getBranchAfterIndex()

llvm::ConstantInt * clang::CodeGen::EHCleanupScope::getBranchAfterIndex ( unsigned I) const
inline

Definition at line 461 of file CGCleanup.h.

References getNumBranchAfters().

◆ getCleanup()

EHScopeStack::Cleanup * clang::CodeGen::EHCleanupScope::getCleanup ( )
inline

Definition at line 426 of file CGCleanup.h.

References getCleanupBuffer().

◆ getCleanupBuffer()

void * clang::CodeGen::EHCleanupScope::getCleanupBuffer ( )
inline

Definition at line 424 of file CGCleanup.h.

Referenced by getCleanup().

◆ getCleanupSize()

size_t clang::CodeGen::EHCleanupScope::getCleanupSize ( ) const
inline

Definition at line 423 of file CGCleanup.h.

References clang::CodeGen::EHScope::CleanupBits.

◆ getEnclosingNormalCleanup()

EHScopeStack::stable_iterator clang::CodeGen::EHCleanupScope::getEnclosingNormalCleanup ( ) const
inline

Definition at line 419 of file CGCleanup.h.

◆ getFixupDepth()

unsigned clang::CodeGen::EHCleanupScope::getFixupDepth ( ) const
inline

Definition at line 418 of file CGCleanup.h.

◆ getNormalBlock()

llvm::BasicBlock * clang::CodeGen::EHCleanupScope::getNormalBlock ( ) const
inline

Definition at line 381 of file CGCleanup.h.

Referenced by destroyOptimisticNormalEntry().

◆ getNumBranchAfters()

unsigned clang::CodeGen::EHCleanupScope::getNumBranchAfters ( ) const
inline

Return the number of unique branch-afters on this scope.

Definition at line 452 of file CGCleanup.h.

Referenced by getBranchAfterBlock(), and getBranchAfterIndex().

◆ getSizeForCleanupSize()

size_t clang::CodeGen::EHCleanupScope::getSizeForCleanupSize ( size_t Size)
inlinestatic

Gets the size required for a lazy cleanup scope with the given cleanup-data requirements.

Definition at line 339 of file CGCleanup.h.

References EHCleanupScope().

◆ hasActiveFlag()

bool clang::CodeGen::EHCleanupScope::hasActiveFlag ( ) const
inline

Definition at line 395 of file CGCleanup.h.

◆ hasBranches()

bool clang::CodeGen::EHCleanupScope::hasBranches ( ) const
inline

True if this cleanup scope has any branch-afters or branch-throughs.

Definition at line 431 of file CGCleanup.h.

◆ hasBranchThroughs()

bool clang::CodeGen::EHCleanupScope::hasBranchThroughs ( ) const
inline

Determines if this cleanup scope has any branch throughs.

Definition at line 486 of file CGCleanup.h.

◆ isActive()

bool clang::CodeGen::EHCleanupScope::isActive ( ) const
inline

Definition at line 386 of file CGCleanup.h.

References clang::CodeGen::EHScope::CleanupBits.

◆ isEHCleanup()

bool clang::CodeGen::EHCleanupScope::isEHCleanup ( ) const
inline

Definition at line 384 of file CGCleanup.h.

References clang::CodeGen::EHScope::CleanupBits.

◆ isFakeUse()

bool clang::CodeGen::EHCleanupScope::isFakeUse ( ) const
inline

Definition at line 392 of file CGCleanup.h.

References clang::CodeGen::EHScope::CleanupBits.

◆ isLifetimeMarker()

bool clang::CodeGen::EHCleanupScope::isLifetimeMarker ( ) const
inline

Definition at line 389 of file CGCleanup.h.

References clang::CodeGen::EHScope::CleanupBits.

◆ isNormalCleanup()

bool clang::CodeGen::EHCleanupScope::isNormalCleanup ( ) const
inline

Definition at line 380 of file CGCleanup.h.

References clang::CodeGen::EHScope::CleanupBits.

◆ MarkEmitted()

void clang::CodeGen::EHCleanupScope::MarkEmitted ( )
inline

Definition at line 376 of file CGCleanup.h.

◆ setActive()

void clang::CodeGen::EHCleanupScope::setActive ( bool A)
inline

Definition at line 387 of file CGCleanup.h.

References clang::CodeGen::EHScope::CleanupBits.

◆ setActiveFlag()

void clang::CodeGen::EHCleanupScope::setActiveFlag ( RawAddress Var)
inline

◆ setFakeUse()

void clang::CodeGen::EHCleanupScope::setFakeUse ( )
inline

Definition at line 393 of file CGCleanup.h.

References clang::CodeGen::EHScope::CleanupBits.

◆ setLifetimeMarker()

void clang::CodeGen::EHCleanupScope::setLifetimeMarker ( )
inline

Definition at line 390 of file CGCleanup.h.

References clang::CodeGen::EHScope::CleanupBits.

◆ setNormalBlock()

void clang::CodeGen::EHCleanupScope::setNormalBlock ( llvm::BasicBlock * BB)
inline

Definition at line 382 of file CGCleanup.h.

◆ setTestFlagInEHCleanup()

void clang::CodeGen::EHCleanupScope::setTestFlagInEHCleanup ( )
inline

Definition at line 411 of file CGCleanup.h.

References clang::CodeGen::EHScope::CleanupBits.

◆ setTestFlagInNormalCleanup()

void clang::CodeGen::EHCleanupScope::setTestFlagInNormalCleanup ( )
inline

Definition at line 404 of file CGCleanup.h.

References clang::CodeGen::EHScope::CleanupBits.

◆ shouldTestFlagInEHCleanup()

bool clang::CodeGen::EHCleanupScope::shouldTestFlagInEHCleanup ( ) const
inline

Definition at line 414 of file CGCleanup.h.

References clang::CodeGen::EHScope::CleanupBits.

◆ shouldTestFlagInNormalCleanup()

bool clang::CodeGen::EHCleanupScope::shouldTestFlagInNormalCleanup ( ) const
inline

Definition at line 407 of file CGCleanup.h.

References clang::CodeGen::EHScope::CleanupBits.


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