clang API Documentation

Classes | Public Member Functions | Static Public Member Functions
clang::CodeGen::EHCleanupScope Class Reference

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

#include <CGCleanup.h>

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

List of all members.

Classes

struct  ExtInfo

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 () LLVM_DELETED_FUNCTION
bool isNormalCleanup () const
llvm::BasicBlock * getNormalBlock () const
void setNormalBlock (llvm::BasicBlock *BB)
bool isEHCleanup () const
llvm::BasicBlock * getEHBlock () const
void setEHBlock (llvm::BasicBlock *BB)
bool isActive () const
void setActive (bool A)
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.
void addBranchAfter (llvm::ConstantInt *Index, llvm::BasicBlock *Block)
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)
bool hasBranchThroughs () const
 Determines if this cleanup scope has any branch throughs.

Static Public Member Functions

static size_t getSizeForCleanupSize (size_t Size)
static bool classof (const EHScope *Scope)

Detailed Description

A cleanup scope which generates the cleanup blocks lazily.

Definition at line 216 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 266 of file CGCleanup.h.

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

Referenced by getAllocatedSize(), and getSizeForCleanupSize().


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

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

static bool clang::CodeGen::EHCleanupScope::classof ( const EHScope Scope) [inline, static]

Definition at line 283 of file CGCleanup.h.

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

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

Definition at line 355 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 360 of file CGCleanup.h.

References getNumBranchAfters().

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

Definition at line 325 of file CGCleanup.h.

References getCleanupBuffer().

Definition at line 323 of file CGCleanup.h.

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

llvm::BasicBlock* clang::CodeGen::EHCleanupScope::getEHBlock ( ) const [inline]

Definition at line 294 of file CGCleanup.h.

References clang::CodeGen::EHScope::getCachedEHDispatchBlock().

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

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

Definition at line 351 of file CGCleanup.h.

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

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

Definition at line 258 of file CGCleanup.h.

References EHCleanupScope().

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

Definition at line 330 of file CGCleanup.h.

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

Determines if this cleanup scope has any branch throughs.

Definition at line 385 of file CGCleanup.h.

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

Definition at line 298 of file CGCleanup.h.

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

void clang::CodeGen::EHCleanupScope::setActiveFlag ( llvm::AllocaInst *  Var) [inline]
void clang::CodeGen::EHCleanupScope::setEHBlock ( llvm::BasicBlock *  BB) [inline]

Definition at line 295 of file CGCleanup.h.

References clang::CodeGen::EHScope::setCachedEHDispatchBlock().

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

Definition at line 291 of file CGCleanup.h.

Referenced by CreateNormalEntry().


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