clang 20.0.0git
|
#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/STLExtras.h"
#include "llvm/Support/raw_ostream.h"
#include <optional>
#include <utility>
Go to the source code of this file.
Namespaces | |
namespace | llvm |
Diagnostic wrappers for TextAPI types for error reporting. | |
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 |
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 . | |
static void | collectSubRegionBindings (SmallVectorImpl< BindingPair > &Bindings, SValBuilder &SVB, const ClusterBindings &Cluster, const SubRegion *Top, bool IncludeAllDefaultBindings) |
static QualType | getUnderlyingType (const SubRegion *R) |
static std::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 . | |
static SmallVector< uint64_t, 2 > | getConstantArrayExtents (const ConstantArrayType *CAT) |
This is a helper function for getConstantValFromConstArrayInitializer . | |
static std::pair< SmallVector< SVal, 2 >, const MemRegion * > | getElementRegionOffsetsWithBase (const ElementRegion *ER) |
This is a helper function for getConstantValFromConstArrayInitializer . | |
static std::optional< SVal > | convertOffsetsFromSvalToUnsigneds (const SmallVector< SVal, 2 > &SrcOffsets, const SmallVector< uint64_t, 2 > ArrayExtents, SmallVector< uint64_t, 2 > &DstOffsets) |
static std::optional< SVal > | getDerivedSymbolForBinding (RegionBindingsConstRef B, const TypedValueRegion *BaseRegion, const TypedValueRegion *SubReg, const ASTContext &Ctx, SValBuilder &SVB) |
typedef std::pair<BindingKey, SVal> BindingPair |
Definition at line 150 of file RegionStore.cpp.
typedef llvm::ImmutableMap<BindingKey, SVal> ClusterBindings |
Definition at line 148 of file RegionStore.cpp.
typedef llvm::ImmutableMapRef<BindingKey, SVal> ClusterBindingsRef |
Definition at line 149 of file RegionStore.cpp.
typedef SmallVector<const FieldDecl *, 8> FieldVector |
Definition at line 866 of file RegionStore.cpp.
typedef llvm::ImmutableMap<const MemRegion *, ClusterBindings> RegionBindings |
Definition at line 153 of file RegionStore.cpp.
typedef const RegionBindingsRef& RegionBindingsConstRef |
Definition at line 325 of file RegionStore.cpp.
|
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 912 of file RegionStore.cpp.
References clang::ento::SVal::getAs(), clang::ASTContext::getCharWidth(), clang::ento::SValBuilder::getContext(), clang::ento::SubRegion::getMemRegionManager(), clang::ento::MemRegionManager::getStaticSize(), getSymbolicOffsetFields(), isCompatibleWithFields(), and clang::ento::SubRegion::isSubRegionOf().
Referenced by collectSubRegionBindings(), and getExistingLazyBinding().
|
static |
Definition at line 983 of file RegionStore.cpp.
References collectSubRegionBindings().
|
static |
Definition at line 1719 of file RegionStore.cpp.
References V.
|
static |
This is a helper function for getConstantValFromConstArrayInitializer
.
Return an array of extents of the declared array type.
E.g. for int x[1][2][3];
returns { 1, 2, 3 }.
Definition at line 1660 of file RegionStore.cpp.
References clang::Type::getCanonicalTypeInternal(), clang::ArrayType::getElementType(), and clang::ConstantArrayType::getZExtSize().
|
static |
Definition at line 1932 of file RegionStore.cpp.
References clang::ento::SValBuilder::getDerivedRegionValueSymbolVal(), clang::ASTContext::getTypeSizeInChars(), clang::ento::TypedValueRegion::getValueType(), and clang::Type::isScalarType().
|
static |
This is a helper function for getConstantValFromConstArrayInitializer
.
Return an array of offsets from nested ElementRegions and a root base region. The array is never empty and a base region is never null.
E.g. for Element{Element{Element{VarRegion},1},2},3}
returns { 3, 2, 1 }. This represents an access through indirection: arr[1][2][3];
ER | The given (possibly nested) ElementRegion. |
Definition at line 1685 of file RegionStore.cpp.
References clang::ento::ElementRegion::getIndex(), and clang::ento::SubRegion::getSuperRegion().
|
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 1578 of file RegionStore.cpp.
References collectSubRegionBindings(), clang::ento::MemRegion::getBaseRegion(), clang::ento::SValBuilder::getContext(), getUnderlyingType(), clang::ASTContext::hasSameUnqualifiedType(), clang::QualType::isNull(), clang::Type::isVoidPointerType(), and V.
|
static |
Definition at line 868 of file RegionStore.cpp.
References isUnionField().
Referenced by collectSubRegionBindings(), and isCompatibleWithFields().
Definition at line 1559 of file RegionStore.cpp.
Referenced by clang::PredefinedExpr::ComputeName(), clang::UsingType::desugar(), getExistingLazyBinding(), IsStructurallyEquivalent(), MarkUsedTemplateParameters(), and clang::UsingType::Profile().
|
static |
Definition at line 883 of file RegionStore.cpp.
References getSymbolicOffsetFields().
Referenced by collectSubRegionBindings().
|
inlinestatic |
Definition at line 862 of file RegionStore.cpp.
References clang::ento::FieldRegion::getDecl(), clang::FieldDecl::getParent(), and clang::TagDecl::isUnion().
Referenced by getSymbolicOffsetFields().