clang 10.0.0git

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 "/work/www-prereleases/10.0.0/rc1/docsbuild/clang/lib/CodeGen/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 ()
bool | hasActiveFlag () const
Address | getActiveFlag () const
void | setActiveFlag (Address 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. More...
void | addBranchAfter (llvm::ConstantInt *Index, llvm::BasicBlock *Block)
| Add a branch-after to this cleanup scope. More...
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)
| Add a branch-through to this cleanup scope. More...
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)
| Gets the size required for a lazy cleanup scope with the given cleanup-data requirements. More...
static bool | classof (const EHScope *Scope)

## Additional Inherited Members
Public Types inherited from clang::CodeGen::EHScope
enum | Kind { Cleanup, Catch, Terminate, Filter, PadEnd }
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 232 of file CGCleanup.h.

## Constructor & Destructor Documentation

## ◆ EHCleanupScope()

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

## ◆ ~EHCleanupScope()

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

## Member Function Documentation

## ◆ 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 372 of file CGCleanup.h.

## ◆ 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 409 of file CGCleanup.h.

## ◆ classof()

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

Definition at line 419 of file CGCleanup.h.

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

## ◆ Destroy()

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

Definition at line 305 of file CGCleanup.h.

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

## ◆ getActiveFlag()

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

Definition at line 324 of file CGCleanup.h.

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

## ◆ getAllocatedSize()

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

Definition at line 283 of file CGCleanup.h.

Referenced by clang::CodeGen::EHScopeStack::iterator::operator++(), and clang::CodeGen::EHScopeStack::popCleanup().

## ◆ getBranchAfterBlock()

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

Definition at line 384 of file CGCleanup.h.

## ◆ getBranchAfterIndex()

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

Definition at line 389 of file CGCleanup.h.

## ◆ getCleanup()

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

Definition at line 354 of file CGCleanup.h.

## ◆ getCleanupBuffer()

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

Definition at line 352 of file CGCleanup.h.

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

## ◆ getCleanupSize()

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

Definition at line 351 of file CGCleanup.h.

## ◆ getEnclosingNormalCleanup()

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

Definition at line 347 of file CGCleanup.h.

Referenced by clang::CodeGen::EHScopeStack::getInnermostActiveNormalCleanup(), clang::CodeGen::EHScopeStack::popCleanup(), and clang::CodeGen::CodeGenFunction::PopCleanupBlocks().

## ◆ getFixupDepth()

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

Definition at line 346 of file CGCleanup.h.

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

## ◆ getNormalBlock()

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

Definition at line 312 of file CGCleanup.h.

Referenced by CreateNormalEntry(), and destroyOptimisticNormalEntry().

## ◆ getNumBranchAfters()

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

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

Definition at line 380 of file CGCleanup.h.

## ◆ getSizeForCleanupSize()

static size_t clang::CodeGen::EHCleanupScope::getSizeForCleanupSize | ( | size_t | Size | ) |
| inline static

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

Definition at line 279 of file CGCleanup.h.

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

## ◆ hasActiveFlag()

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

Definition at line 323 of file CGCleanup.h.

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

## ◆ hasBranches()

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

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

Definition at line 359 of file CGCleanup.h.

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

## ◆ hasBranchThroughs()

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

Determines if this cleanup scope has any branch throughs.

Definition at line 414 of file CGCleanup.h.

## ◆ isActive()

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

Definition at line 317 of file CGCleanup.h.

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

## ◆ isEHCleanup()

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

Definition at line 315 of file CGCleanup.h.

Referenced by clang::CodeGen::CodeGenFunction::initFullExprCleanupWithFlag(), and SetupCleanupBlockActivation().

## ◆ isLifetimeMarker()

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

Definition at line 320 of file CGCleanup.h.

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

## ◆ isNormalCleanup()

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

Definition at line 311 of file CGCleanup.h.

Referenced by CreateNormalEntry(), clang::CodeGen::CodeGenFunction::initFullExprCleanupWithFlag(), and SetupCleanupBlockActivation().

## ◆ setActive()

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

Definition at line 318 of file CGCleanup.h.

## ◆ setActiveFlag()

void clang::CodeGen::EHCleanupScope::setActiveFlag | ( | Address | Var | ) |
| inline

Definition at line 327 of file CGCleanup.h.

References clang::CodeGen::Address::getAlignment(), clang::CodeGen::Address::getPointer(), and clang::CharUnits::isOne().

Referenced by clang::CodeGen::CodeGenFunction::initFullExprCleanupWithFlag(), and SetupCleanupBlockActivation().

## ◆ setLifetimeMarker()

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

Definition at line 321 of file CGCleanup.h.

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

## ◆ setNormalBlock()

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

Definition at line 313 of file CGCleanup.h.

Referenced by CreateNormalEntry().

## ◆ setTestFlagInEHCleanup()

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

Definition at line 339 of file CGCleanup.h.

Referenced by clang::CodeGen::CodeGenFunction::initFullExprCleanupWithFlag(), and SetupCleanupBlockActivation().

## ◆ setTestFlagInNormalCleanup()

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

Definition at line 332 of file CGCleanup.h.

Referenced by clang::CodeGen::CodeGenFunction::initFullExprCleanupWithFlag(), and SetupCleanupBlockActivation().

## ◆ shouldTestFlagInEHCleanup()

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

Definition at line 342 of file CGCleanup.h.

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

## ◆ shouldTestFlagInNormalCleanup()

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

Definition at line 335 of file CGCleanup.h.

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

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

- lib/CodeGen/CGCleanup.h