clang  6.0.0svn
Classes | Public Types | Public Member Functions | Static Public Member Functions | List of all members
clang::CFG Class Reference

CFG - Represents a source-level, intra-procedural CFG that represents the control-flow of a Stmt. More...

#include "clang/Analysis/CFG.h"

Classes

class  BuildOptions
 

Public Types

using CFGBlockListTy = BumpVector< CFGBlock * >
 
using iterator = CFGBlockListTy::iterator
 
using const_iterator = CFGBlockListTy::const_iterator
 
using reverse_iterator = std::reverse_iterator< iterator >
 
using const_reverse_iterator = std::reverse_iterator< const_iterator >
 
using try_block_iterator = std::vector< const CFGBlock * >::const_iterator
 
using synthetic_stmt_iterator = llvm::DenseMap< const DeclStmt *, const DeclStmt * >::const_iterator
 
using synthetic_stmt_range = llvm::iterator_range< synthetic_stmt_iterator >
 

Public Member Functions

CFGBlockcreateBlock ()
 createBlock - Create a new block in the CFG. More...
 
void setEntry (CFGBlock *B)
 setEntry - Set the entry block of the CFG. More...
 
void setIndirectGotoBlock (CFGBlock *B)
 setIndirectGotoBlock - Set the block used for indirect goto jumps. More...
 
CFGBlockfront ()
 
CFGBlockback ()
 
iterator begin ()
 
iterator end ()
 
const_iterator begin () const
 
const_iterator end () const
 
iterator nodes_begin ()
 
iterator nodes_end ()
 
const_iterator nodes_begin () const
 
const_iterator nodes_end () const
 
reverse_iterator rbegin ()
 
reverse_iterator rend ()
 
const_reverse_iterator rbegin () const
 
const_reverse_iterator rend () const
 
CFGBlockgetEntry ()
 
const CFGBlockgetEntry () const
 
CFGBlockgetExit ()
 
const CFGBlockgetExit () const
 
CFGBlockgetIndirectGotoBlock ()
 
const CFGBlockgetIndirectGotoBlock () const
 
try_block_iterator try_blocks_begin () const
 
try_block_iterator try_blocks_end () const
 
void addTryDispatchBlock (const CFGBlock *block)
 
void addSyntheticDeclStmt (const DeclStmt *Synthetic, const DeclStmt *Source)
 Records a synthetic DeclStmt and the DeclStmt it was constructed from. More...
 
synthetic_stmt_iterator synthetic_stmt_begin () const
 Iterates over synthetic DeclStmts in the CFG. More...
 
synthetic_stmt_iterator synthetic_stmt_end () const
 
synthetic_stmt_range synthetic_stmts () const
 
template<typename CALLBACK >
void VisitBlockStmts (CALLBACK &O) const
 
unsigned getNumBlockIDs () const
 getNumBlockIDs - Returns the total number of BlockIDs allocated (which start at 0). More...
 
unsigned size () const
 size - Return the total number of CFGBlocks within the CFG This is simply a renaming of the getNumBlockIDs(). More...
 
void viewCFG (const LangOptions &LO) const
 
void print (raw_ostream &OS, const LangOptions &LO, bool ShowColors) const
 print - A simple pretty printer of a CFG that outputs to an ostream. More...
 
void dump (const LangOptions &LO, bool ShowColors) const
 dump - A simple pretty printer of a CFG that outputs to stderr. More...
 
 CFG ()
 
llvm::BumpPtrAllocator & getAllocator ()
 
BumpVectorContextgetBumpVectorContext ()
 

Static Public Member Functions

static std::unique_ptr< CFGbuildCFG (const Decl *D, Stmt *AST, ASTContext *C, const BuildOptions &BO)
 buildCFG - Builds a CFG from an AST. More...
 

Detailed Description

CFG - Represents a source-level, intra-procedural CFG that represents the control-flow of a Stmt.

The Stmt can represent an entire function body, or a single expression. A CFG will always contain one empty block that represents the Exit point of the CFG. A CFG will also contain a designated Entry block. The CFG solely represents control-flow; it consists of CFGBlocks which are simply containers of Stmt*'s in the AST the CFG was constructed from.

Definition at line 834 of file CFG.h.

Member Typedef Documentation

◆ CFGBlockListTy

Definition at line 897 of file CFG.h.

◆ const_iterator

Definition at line 899 of file CFG.h.

◆ const_reverse_iterator

using clang::CFG::const_reverse_iterator = std::reverse_iterator<const_iterator>

Definition at line 901 of file CFG.h.

◆ iterator

Definition at line 898 of file CFG.h.

◆ reverse_iterator

using clang::CFG::reverse_iterator = std::reverse_iterator<iterator>

Definition at line 900 of file CFG.h.

◆ synthetic_stmt_iterator

using clang::CFG::synthetic_stmt_iterator = llvm::DenseMap<const DeclStmt *, const DeclStmt *>::const_iterator

Definition at line 956 of file CFG.h.

◆ synthetic_stmt_range

Definition at line 957 of file CFG.h.

◆ try_block_iterator

Definition at line 929 of file CFG.h.

Constructor & Destructor Documentation

◆ CFG()

clang::CFG::CFG ( )
inline

Definition at line 1017 of file CFG.h.

Member Function Documentation

◆ addSyntheticDeclStmt()

void clang::CFG::addSyntheticDeclStmt ( const DeclStmt Synthetic,
const DeclStmt Source 
)
inline

Records a synthetic DeclStmt and the DeclStmt it was constructed from.

The CFG uses synthetic DeclStmts when a single AST DeclStmt contains multiple decls.

Definition at line 947 of file CFG.h.

References clang::DeclStmt::isSingleDecl().

◆ addTryDispatchBlock()

void clang::CFG::addTryDispatchBlock ( const CFGBlock block)
inline

Definition at line 939 of file CFG.h.

◆ back()

CFGBlock& clang::CFG::back ( )
inline

Definition at line 904 of file CFG.h.

References clang::CFGBlock::back().

◆ begin() [1/2]

iterator clang::CFG::begin ( )
inline

◆ begin() [2/2]

const_iterator clang::CFG::begin ( ) const
inline

Definition at line 908 of file CFG.h.

◆ buildCFG()

std::unique_ptr< CFG > CFG::buildCFG ( const Decl D,
Stmt AST,
ASTContext C,
const BuildOptions BO 
)
static

buildCFG - Builds a CFG from an AST.

buildCFG - Constructs a CFG from an AST.

Definition at line 4204 of file CFG.cpp.

Referenced by clang::AnalysisDeclContext::getCFG(), and clang::AnalysisDeclContext::getUnoptimizedCFG().

◆ createBlock()

CFGBlock * CFG::createBlock ( )

createBlock - Create a new block in the CFG.

createBlock - Constructs and adds a new CFGBlock to the CFG.

The CFG owns the block; the caller should not directly free it.

The block has no successors or predecessors. If this is the first block created in the CFG, it is automatically set to be the Entry and Exit of the CFG.

Definition at line 4187 of file CFG.cpp.

◆ dump()

void CFG::dump ( const LangOptions LO,
bool  ShowColors 
) const

dump - A simple pretty printer of a CFG that outputs to stderr.

Definition at line 4846 of file CFG.cpp.

References clang::CFGBlock::print().

◆ end() [1/2]

iterator clang::CFG::end ( )
inline

◆ end() [2/2]

const_iterator clang::CFG::end ( ) const
inline

Definition at line 909 of file CFG.h.

◆ front()

CFGBlock& clang::CFG::front ( )
inline

Definition at line 903 of file CFG.h.

References clang::CFGBlock::front().

◆ getAllocator()

llvm::BumpPtrAllocator& clang::CFG::getAllocator ( )
inline

Definition at line 1019 of file CFG.h.

◆ getBumpVectorContext()

BumpVectorContext& clang::CFG::getBumpVectorContext ( )
inline

Definition at line 1023 of file CFG.h.

◆ getEntry() [1/2]

CFGBlock& clang::CFG::getEntry ( )
inline

◆ getEntry() [2/2]

const CFGBlock& clang::CFG::getEntry ( ) const
inline

Definition at line 922 of file CFG.h.

◆ getExit() [1/2]

CFGBlock& clang::CFG::getExit ( )
inline

◆ getExit() [2/2]

const CFGBlock& clang::CFG::getExit ( ) const
inline

Definition at line 924 of file CFG.h.

◆ getIndirectGotoBlock() [1/2]

CFGBlock* clang::CFG::getIndirectGotoBlock ( )
inline

Definition at line 926 of file CFG.h.

Referenced by print_block().

◆ getIndirectGotoBlock() [2/2]

const CFGBlock* clang::CFG::getIndirectGotoBlock ( ) const
inline

Definition at line 927 of file CFG.h.

◆ getNumBlockIDs()

unsigned clang::CFG::getNumBlockIDs ( ) const
inline

◆ nodes_begin() [1/2]

iterator clang::CFG::nodes_begin ( )
inline

◆ nodes_begin() [2/2]

const_iterator clang::CFG::nodes_begin ( ) const
inline

Definition at line 913 of file CFG.h.

◆ nodes_end() [1/2]

iterator clang::CFG::nodes_end ( )
inline

◆ nodes_end() [2/2]

const_iterator clang::CFG::nodes_end ( ) const
inline

Definition at line 914 of file CFG.h.

◆ print()

void CFG::print ( raw_ostream &  OS,
const LangOptions LO,
bool  ShowColors 
) const

print - A simple pretty printer of a CFG that outputs to an ostream.

Definition at line 4851 of file CFG.cpp.

References print_block().

◆ rbegin() [1/2]

reverse_iterator clang::CFG::rbegin ( )
inline

Definition at line 916 of file CFG.h.

◆ rbegin() [2/2]

const_reverse_iterator clang::CFG::rbegin ( ) const
inline

Definition at line 918 of file CFG.h.

◆ rend() [1/2]

reverse_iterator clang::CFG::rend ( )
inline

Definition at line 917 of file CFG.h.

◆ rend() [2/2]

const_reverse_iterator clang::CFG::rend ( ) const
inline

Definition at line 919 of file CFG.h.

◆ setEntry()

void clang::CFG::setEntry ( CFGBlock B)
inline

setEntry - Set the entry block of the CFG.

This is typically used only during CFG construction. Most CFG clients expect that the entry block has no predecessors and contains no statements.

Definition at line 887 of file CFG.h.

◆ setIndirectGotoBlock()

void clang::CFG::setIndirectGotoBlock ( CFGBlock B)
inline

setIndirectGotoBlock - Set the block used for indirect goto jumps.

This is typically used only during CFG construction.

Definition at line 891 of file CFG.h.

◆ size()

unsigned clang::CFG::size ( ) const
inline

size - Return the total number of CFGBlocks within the CFG This is simply a renaming of the getNumBlockIDs().

This is necessary because the dominator implementation needs such an interface.

Definition at line 1003 of file CFG.h.

References dump().

Referenced by llvm::GraphTraits< ::clang::CFG *>::size().

◆ synthetic_stmt_begin()

synthetic_stmt_iterator clang::CFG::synthetic_stmt_begin ( ) const
inline

Iterates over synthetic DeclStmts in the CFG.

Each element is a (synthetic statement, source statement) pair.

See also
addSyntheticDeclStmt

Definition at line 964 of file CFG.h.

◆ synthetic_stmt_end()

synthetic_stmt_iterator clang::CFG::synthetic_stmt_end ( ) const
inline
See also
synthetic_stmt_begin

Definition at line 969 of file CFG.h.

◆ synthetic_stmts()

synthetic_stmt_range clang::CFG::synthetic_stmts ( ) const
inline
See also
synthetic_stmt_begin

Definition at line 974 of file CFG.h.

◆ try_blocks_begin()

try_block_iterator clang::CFG::try_blocks_begin ( ) const
inline

Definition at line 931 of file CFG.h.

◆ try_blocks_end()

try_block_iterator clang::CFG::try_blocks_end ( ) const
inline

Definition at line 935 of file CFG.h.

◆ viewCFG()

void CFG::viewCFG ( const LangOptions LO) const

Definition at line 4971 of file CFG.cpp.

◆ VisitBlockStmts()

template<typename CALLBACK >
void clang::CFG::VisitBlockStmts ( CALLBACK &  O) const
inline

Definition at line 983 of file CFG.h.

Referenced by clang::runUninitializedVariablesAnalysis().


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