clang 18.0.0git
Namespaces | Functions | Variables
DataflowEnvironment.cpp File Reference
#include "clang/Analysis/FlowSensitive/DataflowEnvironment.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/Type.h"
#include "clang/Analysis/FlowSensitive/DataflowLattice.h"
#include "clang/Analysis/FlowSensitive/Value.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/ErrorHandling.h"
#include <cassert>
#include <utility>

Go to the source code of this file.

Namespaces

namespace  clang
 
namespace  clang::dataflow
 Dataflow Directional Tag Classes.
 

Functions

static llvm::DenseMap< const ValueDecl *, StorageLocation * > clang::dataflow::intersectDeclToLoc (const llvm::DenseMap< const ValueDecl *, StorageLocation * > &DeclToLoc1, const llvm::DenseMap< const ValueDecl *, StorageLocation * > &DeclToLoc2)
 Returns a map consisting of key-value entries that are present in both maps.
 
static bool clang::dataflow::equateUnknownValues (Value::Kind K)
 
static bool clang::dataflow::compareDistinctValues (QualType Type, Value &Val1, const Environment &Env1, Value &Val2, const Environment &Env2, Environment::ValueModel &Model)
 
static Valueclang::dataflow::mergeDistinctValues (QualType Type, Value &Val1, const Environment &Env1, Value &Val2, const Environment &Env2, Environment &MergedEnv, Environment::ValueModel &Model)
 Attempts to merge distinct values Val1 and Val2 in Env1 and Env2, respectively, of the same type Type.
 
static Valueclang::dataflow::widenDistinctValues (QualType Type, Value &Prev, const Environment &PrevEnv, Value &Current, Environment &CurrentEnv, Environment::ValueModel &Model)
 
template<typename Key >
bool clang::dataflow::compareKeyToValueMaps (const llvm::MapVector< Key, Value * > &Map1, const llvm::MapVector< Key, Value * > &Map2, const Environment &Env1, const Environment &Env2, Environment::ValueModel &Model)
 
static llvm::MapVector< const StorageLocation *, Value * > clang::dataflow::joinLocToVal (const llvm::MapVector< const StorageLocation *, Value * > &LocToVal, const llvm::MapVector< const StorageLocation *, Value * > &LocToVal2, const Environment &Env1, const Environment &Env2, Environment &JoinedEnv, Environment::ValueModel &Model)
 
template<typename Key >
llvm::MapVector< Key, Value * > clang::dataflow::widenKeyToValueMap (const llvm::MapVector< Key, Value * > &CurMap, const llvm::MapVector< Key, Value * > &PrevMap, Environment &CurEnv, const Environment &PrevEnv, Environment::ValueModel &Model, LatticeJoinEffect &Effect)
 
static void clang::dataflow::insertIfGlobal (const Decl &D, llvm::DenseSet< const VarDecl * > &Vars)
 Initializes a global storage value.
 
static void clang::dataflow::insertIfFunction (const Decl &D, llvm::DenseSet< const FunctionDecl * > &Funcs)
 
static MemberExpr * clang::dataflow::getMemberForAccessor (const CXXMemberCallExpr &C)
 
static void clang::dataflow::getFieldsGlobalsAndFuncs (const Decl &D, FieldSet &Fields, llvm::DenseSet< const VarDecl * > &Vars, llvm::DenseSet< const FunctionDecl * > &Funcs)
 
static void clang::dataflow::getFieldsGlobalsAndFuncs (const Stmt &S, FieldSet &Fields, llvm::DenseSet< const VarDecl * > &Vars, llvm::DenseSet< const FunctionDecl * > &Funcs)
 Traverses S and inserts into Fields, Vars and Funcs any fields, global variables and functions that are declared in or referenced from sub-statements.
 
RecordStorageLocation * clang::dataflow::getImplicitObjectLocation (const CXXMemberCallExpr &MCE, const Environment &Env)
 Returns the storage location for the implicit object of a CXXMemberCallExpr, or null if none is defined in the environment.
 
RecordStorageLocation * clang::dataflow::getBaseObjectLocation (const MemberExpr &ME, const Environment &Env)
 Returns the storage location for the base object of a MemberExpr, or null if none is defined in the environment.
 
std::vector< FieldDecl * > clang::dataflow::getFieldsForInitListExpr (const RecordDecl *RD)
 Returns the fields of RD that are initialized by an InitListExpr, in the order in which they appear in InitListExpr::inits().
 
RecordValue & clang::dataflow::refreshRecordValue (RecordStorageLocation &Loc, Environment &Env)
 Associates a new RecordValue with Loc and returns the new value.
 
RecordValue & clang::dataflow::refreshRecordValue (const Expr &Expr, Environment &Env)
 Associates a new RecordValue with Expr and returns the new value.
 

Variables

static constexpr int clang::dataflow::MaxCompositeValueDepth = 3
 
static constexpr int clang::dataflow::MaxCompositeValueSize = 1000