clang  13.0.0git
Namespaces | Typedefs | Functions | Variables
RegionStore.cpp File Reference
#include "clang/AST/Attr.h"
#include "clang/AST/CharUnits.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
#include "clang/Analysis/Analyses/LiveVariables.h"
#include "clang/Analysis/AnalysisDeclContext.h"
#include "clang/Basic/JsonSupport.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h"
#include "llvm/ADT/ImmutableMap.h"
#include "llvm/ADT/Optional.h"
#include "llvm/Support/raw_ostream.h"
#include <utility>
Include dependency graph for RegionStore.cpp:

Go to the source code of this file.

Namespaces

 llvm
 Specialize PointerLikeTypeTraits to allow LazyGenerationalUpdatePtr to be placed into a PointerUnion.
 

Typedefs

typedef llvm::ImmutableMap< BindingKey, SVal > ClusterBindings
 
typedef llvm::ImmutableMapRef< BindingKey, SVal > ClusterBindingsRef
 
typedef std::pair< BindingKey, SVal > BindingPair
 
typedef llvm::ImmutableMap< const MemRegion *, ClusterBindingsRegionBindings
 
typedef SmallVector< const FieldDecl *, 8 > FieldVector
 

Functions

static raw_ostream & llvm::operator<< (raw_ostream &Out, BindingKey K)
 
static bool isUnionField (const FieldRegion *FR)
 
static void getSymbolicOffsetFields (BindingKey K, FieldVector &Fields)
 
static bool isCompatibleWithFields (BindingKey K, const FieldVector &Fields)
 
static void collectSubRegionBindings (SmallVectorImpl< BindingPair > &Bindings, SValBuilder &SVB, const ClusterBindings &Cluster, const SubRegion *Top, BindingKey TopKey, bool IncludeAllDefaultBindings)
 Collects all bindings in Cluster that may refer to bindings within Top. More...
 
static void collectSubRegionBindings (SmallVectorImpl< BindingPair > &Bindings, SValBuilder &SVB, const ClusterBindings &Cluster, const SubRegion *Top, bool IncludeAllDefaultBindings)
 
static QualType getUnderlyingType (const SubRegion *R)
 
static Optional< nonloc::LazyCompoundVal > getExistingLazyBinding (SValBuilder &SVB, RegionBindingsConstRef B, const SubRegion *R, bool AllowSubregionBindings)
 Checks to see if store B has a lazy binding for region R. More...
 
static bool isRecordEmpty (const RecordDecl *RD)
 

Variables

const typedef RegionBindingsRef & RegionBindingsConstRef
 

Typedef Documentation

◆ BindingPair

typedef std::pair<BindingKey, SVal> BindingPair

Definition at line 148 of file RegionStore.cpp.

◆ ClusterBindings

typedef llvm::ImmutableMap<BindingKey, SVal> ClusterBindings

Definition at line 146 of file RegionStore.cpp.

◆ ClusterBindingsRef

typedef llvm::ImmutableMapRef<BindingKey, SVal> ClusterBindingsRef

Definition at line 147 of file RegionStore.cpp.

◆ FieldVector

typedef SmallVector<const FieldDecl *, 8> FieldVector

Definition at line 811 of file RegionStore.cpp.

◆ RegionBindings

typedef llvm::ImmutableMap<const MemRegion *, ClusterBindings> RegionBindings

Definition at line 151 of file RegionStore.cpp.

Function Documentation

◆ collectSubRegionBindings() [1/2]

static void collectSubRegionBindings ( SmallVectorImpl< BindingPair > &  Bindings,
SValBuilder &  SVB,
const ClusterBindings Cluster,
const SubRegion *  Top,
BindingKey  TopKey,
bool  IncludeAllDefaultBindings 
)
static

Collects all bindings in Cluster that may refer to bindings within Top.

Each binding is a pair whose first is the key (a BindingKey) and whose second is the value (an SVal).

The IncludeAllDefaultBindings parameter specifies whether to include default bindings that may extend beyond Top itself, e.g. if Top is an aggregate within a larger aggregate with a default binding.

Definition at line 857 of file RegionStore.cpp.

References getSymbolicOffsetFields(), and isCompatibleWithFields().

Referenced by collectSubRegionBindings(), and getExistingLazyBinding().

◆ collectSubRegionBindings() [2/2]

static void collectSubRegionBindings ( SmallVectorImpl< BindingPair > &  Bindings,
SValBuilder &  SVB,
const ClusterBindings Cluster,
const SubRegion *  Top,
bool  IncludeAllDefaultBindings 
)
static

Definition at line 929 of file RegionStore.cpp.

References collectSubRegionBindings().

◆ getExistingLazyBinding()

static Optional<nonloc::LazyCompoundVal> getExistingLazyBinding ( SValBuilder &  SVB,
RegionBindingsConstRef  B,
const SubRegion *  R,
bool  AllowSubregionBindings 
)
static

Checks to see if store B has a lazy binding for region R.

If AllowSubregionBindings is false, a lazy binding will be rejected if there are additional bindings within R.

Note that unlike RegionStoreManager::findLazyBinding, this will not search for lazy bindings for super-regions of R.

Definition at line 1552 of file RegionStore.cpp.

References collectSubRegionBindings(), getUnderlyingType(), clang::QualType::isNull(), clang::Type::isVoidPointerType(), and V.

◆ getSymbolicOffsetFields()

static void getSymbolicOffsetFields ( BindingKey  K,
FieldVector Fields 
)
static

Definition at line 813 of file RegionStore.cpp.

References isUnionField().

Referenced by collectSubRegionBindings(), and isCompatibleWithFields().

◆ getUnderlyingType()

static QualType getUnderlyingType ( const SubRegion *  R)
static

◆ isCompatibleWithFields()

static bool isCompatibleWithFields ( BindingKey  K,
const FieldVector Fields 
)
static

Definition at line 828 of file RegionStore.cpp.

References getSymbolicOffsetFields().

Referenced by collectSubRegionBindings().

◆ isRecordEmpty()

static bool isRecordEmpty ( const RecordDecl RD)
static

Definition at line 2058 of file RegionStore.cpp.

References clang::RecordDecl::field_empty().

◆ isUnionField()

static bool isUnionField ( const FieldRegion *  FR)
inlinestatic

Definition at line 807 of file RegionStore.cpp.

Referenced by getSymbolicOffsetFields().

Variable Documentation

◆ RegionBindingsConstRef

const typedef RegionBindingsRef& RegionBindingsConstRef

Definition at line 263 of file RegionStore.cpp.