clang: clang::CodeGen::EHCleanupScope Class Reference (original) (raw)

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](CGCleanup%5F8h%5Fsource.html)"

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 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
};

A cleanup scope which generates the cleanup blocks lazily.

Definition at line 243 of file CGCleanup.h.

~EHCleanupScope()

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

AddAuxAllocas()

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

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 436 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 473 of file CGCleanup.h.

References clang::Block.

classof()

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

Destroy()

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

getActiveFlag()

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

getAllocatedSize()

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

getBranchAfterBlock()

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

getBranchAfterIndex()

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

getCleanup()

getCleanupBuffer()

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

getCleanupSize()

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

getEnclosingNormalCleanup()

getFixupDepth()

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

getNormalBlock()

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

getNumBranchAfters()

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

getSizeForCleanupSize()

static 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 335 of file CGCleanup.h.

hasActiveFlag()

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

hasBranches()

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

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

Definition at line 423 of file CGCleanup.h.

hasBranchThroughs()

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

Determines if this cleanup scope has any branch throughs.

Definition at line 478 of file CGCleanup.h.

isActive()

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

isEHCleanup()

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

isLifetimeMarker()

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

isNormalCleanup()

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

MarkEmitted()

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

setActive()

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

setActiveFlag()

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

setLifetimeMarker()

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

setNormalBlock()

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

setTestFlagInEHCleanup()

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

setTestFlagInNormalCleanup()

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

shouldTestFlagInEHCleanup()

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

shouldTestFlagInNormalCleanup()

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

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