clang  3.7.0
Classes | Public Member Functions | Static Public Member Functions | List of all members
clang::CodeGen::EHCleanupScope Class Reference

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

#include <CGCleanup.h>

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

Public Member Functions

size_t getAllocatedSize () const
 
 EHCleanupScope (bool isNormal, bool isEH, bool isActive, unsigned cleanupSize, unsigned fixupDepth, EHScopeStack::stable_iterator enclosingNormal, EHScopeStack::stable_iterator enclosingEH)
 
void Destroy ()
 
 ~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 ()
 
llvm::AllocaInst * getActiveFlag () const
 
void setActiveFlag (llvm::AllocaInst *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::CleanupgetCleanup ()
 
bool hasBranches () const
 True if this cleanup scope has any branch-afters or branch-throughs. More...
 
void addBranchAfter (llvm::ConstantInt *Index, llvm::BasicBlock *Block)
 
unsigned getNumBranchAfters () const
 Return the number of unique branch-afters on this scope. More...
 
llvm::BasicBlock * getBranchAfterBlock (unsigned I) const
 
llvm::ConstantInt * getBranchAfterIndex (unsigned I) const
 
bool addBranchThrough (llvm::BasicBlock *Block)
 
bool hasBranchThroughs () const
 Determines if this cleanup scope has any branch throughs. More...
 
- 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)
 
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 219 of file CGCleanup.h.

Constructor & Destructor Documentation

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

Definition at line 269 of file CGCleanup.h.

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

Referenced by getAllocatedSize(), and getSizeForCleanupSize().

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

Member Function Documentation

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

Referenced by clang::CodeGen::CodeGenFunction::EmitBranchThroughCleanup().

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

Referenced by clang::CodeGen::CodeGenFunction::EmitBranchThroughCleanup().

static bool clang::CodeGen::EHCleanupScope::classof ( const EHScope Scope)
inlinestatic
void clang::CodeGen::EHCleanupScope::Destroy ( )
inline

Definition at line 287 of file CGCleanup.h.

Referenced by clang::CodeGen::EHScopeStack::popCleanup().

llvm::AllocaInst* clang::CodeGen::EHCleanupScope::getActiveFlag ( ) const
inline
size_t clang::CodeGen::EHCleanupScope::getAllocatedSize ( ) const
inline
llvm::BasicBlock* clang::CodeGen::EHCleanupScope::getBranchAfterBlock ( unsigned  I) const
inline

Definition at line 360 of file CGCleanup.h.

References getNumBranchAfters().

Referenced by clang::CodeGen::CodeGenFunction::PopCleanupBlock().

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

Definition at line 365 of file CGCleanup.h.

References getNumBranchAfters().

Referenced by clang::CodeGen::CodeGenFunction::PopCleanupBlock().

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

Definition at line 330 of file CGCleanup.h.

References getCleanupBuffer().

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

Definition at line 328 of file CGCleanup.h.

Referenced by getCleanup(), and clang::CodeGen::CodeGenFunction::PopCleanupBlock().

size_t clang::CodeGen::EHCleanupScope::getCleanupSize ( ) const
inline
EHScopeStack::stable_iterator clang::CodeGen::EHCleanupScope::getEnclosingNormalCleanup ( ) const
inline
unsigned clang::CodeGen::EHCleanupScope::getFixupDepth ( ) const
inline
llvm::BasicBlock* clang::CodeGen::EHCleanupScope::getNormalBlock ( ) const
inline
unsigned clang::CodeGen::EHCleanupScope::getNumBranchAfters ( ) const
inline

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

Definition at line 356 of file CGCleanup.h.

Referenced by getBranchAfterBlock(), getBranchAfterIndex(), and clang::CodeGen::CodeGenFunction::PopCleanupBlock().

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

References EHCleanupScope().

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

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

Definition at line 335 of file CGCleanup.h.

Referenced by clang::CodeGen::CodeGenFunction::PopCleanupBlock().

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

Determines if this cleanup scope has any branch throughs.

Definition at line 390 of file CGCleanup.h.

Referenced by clang::CodeGen::CodeGenFunction::PopCleanupBlock().

bool clang::CodeGen::EHCleanupScope::isActive ( ) const
inline
bool clang::CodeGen::EHCleanupScope::isEHCleanup ( ) const
inline
bool clang::CodeGen::EHCleanupScope::isLifetimeMarker ( ) const
inline
bool clang::CodeGen::EHCleanupScope::isNormalCleanup ( ) const
inline
void clang::CodeGen::EHCleanupScope::setActive ( bool  A)
inline

Definition at line 300 of file CGCleanup.h.

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

void clang::CodeGen::EHCleanupScope::setActiveFlag ( llvm::AllocaInst *  Var)
inline
void clang::CodeGen::EHCleanupScope::setLifetimeMarker ( )
inline
void clang::CodeGen::EHCleanupScope::setNormalBlock ( llvm::BasicBlock *  BB)
inline

Definition at line 295 of file CGCleanup.h.

Referenced by CreateNormalEntry().

void clang::CodeGen::EHCleanupScope::setTestFlagInEHCleanup ( )
inline
void clang::CodeGen::EHCleanupScope::setTestFlagInNormalCleanup ( )
inline
bool clang::CodeGen::EHCleanupScope::shouldTestFlagInEHCleanup ( ) const
inline
bool clang::CodeGen::EHCleanupScope::shouldTestFlagInNormalCleanup ( ) const
inline

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