clang 20.0.0git
|
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 | try_block_range = llvm::iterator_range< try_block_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 | |
CFGBlock * | createBlock () |
Create a new block in the CFG. | |
void | setEntry (CFGBlock *B) |
Set the entry block of the CFG. | |
void | setIndirectGotoBlock (CFGBlock *B) |
Set the block used for indirect goto jumps. | |
CFGBlock & | front () |
CFGBlock & | back () |
iterator | begin () |
iterator | end () |
const_iterator | begin () const |
const_iterator | end () const |
iterator | nodes_begin () |
iterator | nodes_end () |
llvm::iterator_range< iterator > | nodes () |
llvm::iterator_range< const_iterator > | const_nodes () const |
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 |
llvm::iterator_range< reverse_iterator > | reverse_nodes () |
llvm::iterator_range< const_reverse_iterator > | const_reverse_nodes () const |
CFGBlock & | getEntry () |
const CFGBlock & | getEntry () const |
CFGBlock & | getExit () |
const CFGBlock & | getExit () const |
CFGBlock * | getIndirectGotoBlock () |
const CFGBlock * | getIndirectGotoBlock () const |
try_block_iterator | try_blocks_begin () const |
try_block_iterator | try_blocks_end () const |
try_block_range | try_blocks () 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. | |
synthetic_stmt_iterator | synthetic_stmt_begin () const |
Iterates over synthetic DeclStmts in the CFG. | |
synthetic_stmt_iterator | synthetic_stmt_end () const |
synthetic_stmt_range | synthetic_stmts () const |
template<typename Callback > | |
void | VisitBlockStmts (Callback &O) const |
unsigned | getNumBlockIDs () const |
Returns the total number of BlockIDs allocated (which start at 0). | |
unsigned | size () const |
Return the total number of CFGBlocks within the CFG This is simply a renaming of the getNumBlockIDs(). | |
bool | isLinear () const |
Returns true if the CFG has no branches. | |
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. | |
void | dump (const LangOptions &LO, bool ShowColors) const |
dump - A simple pretty printer of a CFG that outputs to stderr. | |
CFG () | |
llvm::BumpPtrAllocator & | getAllocator () |
BumpVectorContext & | getBumpVectorContext () |
Static Public Member Functions | |
static std::unique_ptr< CFG > | buildCFG (const Decl *D, Stmt *AST, ASTContext *C, const BuildOptions &BO) |
Builds a CFG from an AST. | |
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.
using clang::CFG::CFGBlockListTy = BumpVector<CFGBlock *> |
using clang::CFG::const_reverse_iterator = std::reverse_iterator<const_iterator> |
using clang::CFG::reverse_iterator = std::reverse_iterator<iterator> |
using clang::CFG::synthetic_stmt_iterator = llvm::DenseMap<const DeclStmt *, const DeclStmt *>::const_iterator |
using clang::CFG::synthetic_stmt_range = llvm::iterator_range<synthetic_stmt_iterator> |
using clang::CFG::try_block_iterator = std::vector<const CFGBlock *>::const_iterator |
using clang::CFG::try_block_range = llvm::iterator_range<try_block_iterator> |
|
inline |
|
inline |
Definition at line 1292 of file CFG.h.
References clang::BumpVector< T >::back().
Referenced by createBlock().
|
inline |
Definition at line 1294 of file CFG.h.
References clang::BumpVector< T >::begin().
Referenced by const_nodes(), createBlock(), clang::CFGDominatorTreeImpl< IsPostDom >::dump(), clang::CFGBlock::getIndexInCFG(), nodes(), clang::LiveVariables::runOnAllBlocks(), and VisitBlockStmts().
|
inline |
Definition at line 1296 of file CFG.h.
References clang::BumpVector< T >::begin().
|
static |
Builds a CFG from an AST.
buildCFG - Constructs a CFG from an AST.
Definition at line 5236 of file CFG.cpp.
Referenced by clang::dataflow::AdornedCFG::build(), clang::AnalysisDeclContext::getCFG(), and clang::AnalysisDeclContext::getUnoptimizedCFG().
|
inline |
|
inline |
CFGBlock * CFG::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 5220 of file CFG.cpp.
References back(), begin(), end(), getAllocator(), and clang::BumpVector< T >::push_back().
void CFG::dump | ( | const LangOptions & | LO, |
bool | ShowColors | ||
) | const |
dump - A simple pretty printer of a CFG that outputs to stderr.
Definition at line 6103 of file CFG.cpp.
References clang::CFGBlock::print(), and ShowColors.
Referenced by clang::AnalysisDeclContext::dumpCFG().
|
inline |
Definition at line 1295 of file CFG.h.
References clang::BumpVector< T >::end().
Referenced by const_nodes(), createBlock(), clang::CFGDominatorTreeImpl< IsPostDom >::dump(), nodes(), clang::LiveVariables::runOnAllBlocks(), and VisitBlockStmts().
|
inline |
Definition at line 1297 of file CFG.h.
References clang::BumpVector< T >::end().
|
inline |
Definition at line 1291 of file CFG.h.
References clang::BumpVector< T >::front().
|
inline |
Definition at line 1429 of file CFG.h.
References clang::BumpVectorContext::getAllocator().
Referenced by createBlock().
|
inline |
|
inline |
Definition at line 1322 of file CFG.h.
Referenced by annotateStartParameter(), CheckFallThrough(), checkForRecursiveFunctionCall(), clang::ento::PathDiagnosticLocation::create(), clang::ento::CoreEngine::ExecuteWorkList(), clang::dataflow::findReachableBlocks(), clang::reachable_code::FindUnreachableCode(), clang::CallEnter::getEntry(), llvm::GraphTraits< ::clang::CFG * >::getEntryNode(), clang::internal::partitionIntoIntervals(), print_block(), clang::dataflow::runTypeErasedDataflowAnalysis(), clang::runUninitializedVariablesAnalysis(), visitReachableThrows(), and clang::threadSafety::CFGWalker::walk().
|
inline |
Definition at line 1324 of file CFG.h.
Referenced by CheckFallThrough(), checkForRecursiveFunctionCall(), checkRecursiveFunction(), checkThrowInNonThrowingFunc(), findBlockLocations(), clang::FunctionExitPoint::getBlock(), llvm::GraphTraits< Inverse< ::clang::CFG * > >::getEntryNode(), clang::ento::PathSensitiveBugReport::getStmt(), clang::CFGBlock::isInevitablySinking(), print_block(), throwEscapes(), and clang::threadSafety::CFGWalker::walk().
|
inline |
Definition at line 1327 of file CFG.h.
Referenced by print_block().
|
inline |
|
inline |
Returns the total number of BlockIDs allocated (which start at 0).
Definition at line 1402 of file CFG.h.
Referenced by clang::internal::buildInterval(), CheckFallThrough(), clang::LiveVariables::computeLiveness(), clang::ento::CoreEngine::ExecuteWorkList(), clang::dataflow::findReachableBlocks(), clang::reachable_code::FindUnreachableCode(), clang::internal::partitionIntoIntervals(), clang::PostOrderCFGView::PostOrderCFGView(), clang::consumed::ConsumedAnalyzer::run(), clang::runUninitializedVariablesAnalysis(), throwEscapes(), and visitReachableThrows().
bool CFG::isLinear | ( | ) | const |
Returns true if the CFG has no branches.
Usually it boils down to the CFG having exactly three blocks (entry, the actual code, exit), but sometimes more blocks appear due to having control flow that can be fully resolved in compile time.
Definition at line 5242 of file CFG.cpp.
References size(), clang::CFGBlock::succs(), and Visited.
Referenced by clang::ento::NoStateChangeFuncVisitor::VisitNode().
|
inline |
Definition at line 1302 of file CFG.h.
References begin(), and end().
Referenced by clang::LiveVariables::computeLiveness().
|
inline |
Definition at line 1299 of file CFG.h.
References clang::BumpVector< T >::begin().
Referenced by llvm::GraphTraits< ::clang::CFG * >::nodes_begin(), and llvm::GraphTraits< Inverse< ::clang::CFG * > >::nodes_begin().
|
inline |
Definition at line 1307 of file CFG.h.
References clang::BumpVector< T >::begin().
|
inline |
Definition at line 1300 of file CFG.h.
References clang::BumpVector< T >::end().
Referenced by llvm::GraphTraits< ::clang::CFG * >::nodes_end(), and llvm::GraphTraits< Inverse< ::clang::CFG * > >::nodes_end().
|
inline |
Definition at line 1308 of file CFG.h.
References clang::BumpVector< T >::end().
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 6108 of file CFG.cpp.
References E, print_block(), and ShowColors.
|
inline |
Definition at line 1310 of file CFG.h.
References clang::BumpVector< T >::rbegin().
Referenced by const_reverse_nodes(), and reverse_nodes().
|
inline |
Definition at line 1312 of file CFG.h.
References clang::BumpVector< T >::rbegin().
|
inline |
Definition at line 1311 of file CFG.h.
References clang::BumpVector< T >::rend().
Referenced by const_reverse_nodes(), and reverse_nodes().
|
inline |
Definition at line 1313 of file CFG.h.
References clang::BumpVector< T >::rend().
|
inline |
|
inline |
|
inline |
|
inline |
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 1407 of file CFG.h.
Referenced by clang::getIntervalWTO(), isLinear(), clang::dataflow::runTypeErasedDataflowAnalysis(), and llvm::GraphTraits< ::clang::CFG * >::size().
|
inline |
Iterates over synthetic DeclStmts in the CFG.
Each element is a (synthetic statement, source statement) pair.
Definition at line 1370 of file CFG.h.
Referenced by addParentsForSyntheticStmts(), and synthetic_stmts().
|
inline |
Definition at line 1375 of file CFG.h.
Referenced by addParentsForSyntheticStmts(), and synthetic_stmts().
|
inline |
Definition at line 1380 of file CFG.h.
References synthetic_stmt_begin(), and synthetic_stmt_end().
|
inline |
Definition at line 1341 of file CFG.h.
References try_blocks_begin(), and try_blocks_end().
Referenced by clang::reachable_code::FindUnreachableCode().
|
inline |
Definition at line 1333 of file CFG.h.
Referenced by try_blocks().
|
inline |
Definition at line 1337 of file CFG.h.
Referenced by try_blocks().
void CFG::viewCFG | ( | const LangOptions & | LO | ) | const |
Definition at line 6334 of file CFG.cpp.
References GraphHelper.
|
inline |
Definition at line 1388 of file CFG.h.
References begin(), E, end(), and clang::ast_matchers::stmt.
Referenced by clang::runUninitializedVariablesAnalysis().