clang 20.0.0git
Namespaces | Macros | Functions
TypeErasedDataflowAnalysis.cpp File Reference
#include <optional>
#include <system_error>
#include <utility>
#include <vector>
#include "clang/AST/ASTDumper.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/OperationKinds.h"
#include "clang/AST/StmtCXX.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/Analysis/Analyses/PostOrderCFGView.h"
#include "clang/Analysis/CFG.h"
#include "clang/Analysis/FlowSensitive/DataflowEnvironment.h"
#include "clang/Analysis/FlowSensitive/DataflowLattice.h"
#include "clang/Analysis/FlowSensitive/DataflowWorklist.h"
#include "clang/Analysis/FlowSensitive/RecordOps.h"
#include "clang/Analysis/FlowSensitive/Transfer.h"
#include "clang/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.h"
#include "clang/Analysis/FlowSensitive/Value.h"
#include "clang/Support/Compiler.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Error.h"

Go to the source code of this file.

Namespaces

namespace  clang
 The JSON file list parser is used to communicate input to InstallAPI.
 
namespace  clang::dataflow
 Dataflow Directional Tag Classes.
 
namespace  llvm
 Diagnostic wrappers for TextAPI types for error reporting.
 

Macros

#define DEBUG_TYPE   "clang-dataflow"
 

Functions

static int clang::dataflow::blockIndexInPredecessor (const CFGBlock &Pred, const CFGBlock &Block)
 Returns the index of Block in the successors of Pred.
 
static bool clang::dataflow::isBackedgeNode (const CFGBlock &B)
 
static const Expr * clang::dataflow::getTerminatorCondition (const Stmt *TerminatorStmt)
 
static TypeErasedDataflowAnalysisState clang::dataflow::computeBlockInputState (const CFGBlock &Block, AnalysisContext &AC)
 Computes the input state for a given basic block by joining the output states of its predecessors.
 
static void clang::dataflow::builtinTransferStatement (unsigned CurBlockID, const CFGStmt &Elt, TypeErasedDataflowAnalysisState &InputState, AnalysisContext &AC)
 Built-in transfer function for CFGStmt.
 
static void clang::dataflow::builtinTransferInitializer (const CFGInitializer &Elt, TypeErasedDataflowAnalysisState &InputState)
 Built-in transfer function for CFGInitializer.
 
static void clang::dataflow::builtinTransfer (unsigned CurBlockID, const CFGElement &Elt, TypeErasedDataflowAnalysisState &State, AnalysisContext &AC)
 
static TypeErasedDataflowAnalysisState clang::dataflow::transferCFGBlock (const CFGBlock &Block, AnalysisContext &AC, const CFGEltCallbacksTypeErased &PostAnalysisCallbacks={})
 Transfers State by evaluating each element in the Block based on the AC.Analysis specified.
 
llvm::Expected< std::vector< std::optional< TypeErasedDataflowAnalysisState > > > clang::dataflow::runTypeErasedDataflowAnalysis (const AdornedCFG &ACFG, TypeErasedDataflowAnalysis &Analysis, const Environment &InitEnv, const CFGEltCallbacksTypeErased &PostAnalysisCallbacks, std::int32_t MaxBlockVisits)
 Performs dataflow analysis and returns a mapping from basic block IDs to dataflow analysis states that model the respective basic blocks.
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "clang-dataflow"

Definition at line 39 of file TypeErasedDataflowAnalysis.cpp.

Variable Documentation

◆ ACFG

const AdornedCFG& ACFG

Contains the CFG being analyzed.

Definition at line 117 of file TypeErasedDataflowAnalysis.cpp.

Referenced by clang::dataflow::runTypeErasedDataflowAnalysis().

◆ Analysis

TypeErasedDataflowAnalysis& Analysis

◆ BlockStates

llvm::ArrayRef<std::optional<TypeErasedDataflowAnalysisState> > BlockStates

Stores the state of a CFG block if it has been evaluated by the analysis.

The indices correspond to the block IDs.

Definition at line 125 of file TypeErasedDataflowAnalysis.cpp.

Referenced by clang::dataflow::runTypeErasedDataflowAnalysis().

◆ InitEnv

const Environment& InitEnv

Initial state to start the analysis.

Definition at line 121 of file TypeErasedDataflowAnalysis.cpp.

Referenced by clang::dataflow::runTypeErasedDataflowAnalysis().

◆ Log

Logger& Log