clang API Documentation

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/AnalysisContext.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/ImmutableList.h"
#include "llvm/ADT/ImmutableMap.h"
#include "llvm/ADT/Optional.h"
#include "llvm/Support/raw_ostream.h"
Include dependency graph for RegionStore.cpp:

Go to the source code of this file.

Classes

struct  llvm::isPodLike< BindingKey >

Namespaces

namespace  llvm

Typedefs

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

Enumerations

enum  GlobalsFilterKind

Functions

static raw_ostream & llvm::operator<< (raw_ostream &os, BindingKey K)
static bool isUnionField (const FieldRegion *FR)
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)
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)
static bool isRecordEmpty (const RecordDecl *RD)

Typedef Documentation

typedef std::pair<BindingKey, SVal> BindingPair

Definition at line 144 of file RegionStore.cpp.

typedef llvm::ImmutableMap<BindingKey, SVal> ClusterBindings

Definition at line 142 of file RegionStore.cpp.

typedef llvm::ImmutableMapRef<BindingKey, SVal> ClusterBindingsRef

Definition at line 143 of file RegionStore.cpp.

typedef SmallVector<const FieldDecl *, 8> FieldVector

Definition at line 768 of file RegionStore.cpp.

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

Definition at line 147 of file RegionStore.cpp.

typedef const RegionBindingsRef& RegionBindingsConstRef

Definition at line 229 of file RegionStore.cpp.


Enumeration Type Documentation

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

Definition at line 633 of file RegionStore.cpp.


Function Documentation

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

References clang::ento::SVal::getAs(), clang::ASTContext::getCharWidth(), clang::ento::SValBuilder::getContext(), clang::ento::SubRegion::getExtent(), getSymbolicOffsetFields(), isCompatibleWithFields(), clang::ento::MemRegion::isSubRegionOf(), and clang::ento::SubRegion::isSubRegionOf().

Referenced by collectSubRegionBindings(), and getExistingLazyBinding().

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

Definition at line 886 of file RegionStore.cpp.

References collectSubRegionBindings().

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

References collectSubRegionBindings(), clang::ento::SVal::getAs(), clang::ento::MemRegion::getBaseRegion(), clang::ento::SValBuilder::getContext(), getUnderlyingType(), clang::ASTContext::hasSameUnqualifiedType(), clang::QualType::isNull(), and clang::Type::isVoidPointerType().

void getSymbolicOffsetFields ( BindingKey  K,
FieldVector Fields 
)

Definition at line 770 of file RegionStore.cpp.

References isUnionField().

Referenced by collectSubRegionBindings(), and isCompatibleWithFields().

static QualType getUnderlyingType ( const SubRegion R) [static]
static bool isCompatibleWithFields ( BindingKey  K,
const FieldVector Fields 
) [static]

Definition at line 785 of file RegionStore.cpp.

References getSymbolicOffsetFields().

Referenced by collectSubRegionBindings().

static bool isRecordEmpty ( const RecordDecl RD) [static]

Definition at line 1826 of file RegionStore.cpp.

static bool isUnionField ( const FieldRegion FR) [inline, static]