clang  6.0.0svn
Classes | Namespaces | Typedefs | Enumerations | Functions
RegionStore.cpp File Reference
#include "clang/AST/Attr.h"
#include "clang/AST/CharUnits.h"
#include "clang/Analysis/Analyses/LiveVariables.h"
#include "clang/Analysis/AnalysisDeclContext.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/MemRegion.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SubEngine.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.

Classes

struct  llvm::isPodLike< typename >
 
struct  llvm::isPodLike< BindingKey >
 

Namespaces

 llvm
 DominatorTree GraphTraits specialization so the DominatorTree can be iterable by generic graph iterators.
 

Typedefs

typedef llvm::ImmutableMap< BindingKey, SValClusterBindings
 
typedef llvm::ImmutableMapRef< BindingKey, SValClusterBindingsRef
 
typedef std::pair< BindingKey, SValBindingPair
 
typedef llvm::ImmutableMap< const MemRegion *, ClusterBindingsRegionBindings
 
typedef const RegionBindingsRef & RegionBindingsConstRef
 
typedef SmallVector< const FieldDecl *, 8 > FieldVector
 

Enumerations

enum  GlobalsFilterKind
 Used to determine which global regions are automatically included in the initial worklist of a ClusterAnalysis. More...
 

Functions

static raw_ostream & llvm::operator<< (raw_ostream &os, 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::LazyCompoundValgetExistingLazyBinding (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)
 

Typedef Documentation

◆ BindingPair

typedef std::pair<BindingKey, SVal> BindingPair

Definition at line 147 of file RegionStore.cpp.

◆ ClusterBindings

typedef llvm::ImmutableMap<BindingKey, SVal> ClusterBindings

Definition at line 145 of file RegionStore.cpp.

◆ ClusterBindingsRef

typedef llvm::ImmutableMapRef<BindingKey, SVal> ClusterBindingsRef

Definition at line 146 of file RegionStore.cpp.

◆ FieldVector

typedef SmallVector<const FieldDecl *, 8> FieldVector

Definition at line 775 of file RegionStore.cpp.

◆ RegionBindings

Definition at line 150 of file RegionStore.cpp.

◆ RegionBindingsConstRef

typedef const RegionBindingsRef& RegionBindingsConstRef

Definition at line 226 of file RegionStore.cpp.

Enumeration Type Documentation

◆ GlobalsFilterKind

Used to determine which global regions are automatically included in the initial worklist of a ClusterAnalysis.

Definition at line 651 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 821 of file RegionStore.cpp.

References clang::Default, getSymbolicOffsetFields(), and clang::Make.

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 893 of file RegionStore.cpp.

References collectSubRegionBindings(), clang::Default, and clang::Make.

◆ getExistingLazyBinding()

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

◆ getSymbolicOffsetFields()

static void getSymbolicOffsetFields ( BindingKey  K,
FieldVector Fields 
)
static

Definition at line 777 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 792 of file RegionStore.cpp.

References getSymbolicOffsetFields().

◆ isRecordEmpty()

static bool isRecordEmpty ( const RecordDecl RD)
static

◆ isUnionField()

static bool isUnionField ( const FieldRegion FR)
inlinestatic