13 #ifndef LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_ITERATOR_H 14 #define LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_ITERATOR_H 39 : Cont(C), Valid(V), Offset(Of) {}
63 return Cont == X.Cont && Valid == X.Valid && Offset == X.Offset;
67 return Cont != X.Cont || Valid != X.Valid || Offset != X.Offset;
101 return Begin == X.Begin && End == X.End;
105 return Begin != X.Begin || End != X.End;
127 static void *
GDMIndex() {
static int Index;
return &Index; }
133 static void *
GDMIndex() {
static int Index;
return &Index; }
139 static void *
GDMIndex() {
static int Index;
return &Index; }
161 const IteratorPosition &Pos);
165 const SVal &Distance);
bool isDecrementOperator(OverloadedOperatorKind OK)
Represents a function declaration or definition.
A (possibly-)qualified type.
MemRegion - The root abstract class for all memory regions.
The base class of the type hierarchy.
bool isComparisonOperator(OverloadedOperatorKind OK)
bool operator==(const IteratorPosition &X) const
bool isIteratorType(const QualType &Type)
CLANG_ENTO_PROGRAMSTATE_MAP(const MemRegion *, ContainerData) ContainerMapTy
void Profile(llvm::FoldingSetNodeID &ID) const
bool isIncrementOperator(OverloadedOperatorKind OK)
void Profile(llvm::FoldingSetNodeID &ID) const
const IteratorPosition * getIteratorPosition(ProgramStateRef State, const SVal &Val)
IteratorPosition reAssign(const MemRegion *NewCont) const
const ContainerData * getContainerData(ProgramStateRef State, const MemRegion *Cont)
SymbolRef getBegin() const
ContainerData newEnd(SymbolRef E) const
bool operator!=(const ContainerData &X) const
bool isIterator(const CXXRecordDecl *CRD)
static ContainerData fromEnd(SymbolRef E)
bool isEraseCall(const FunctionDecl *Func)
bool isDereferenceOperator(OverloadedOperatorKind OK)
const MemRegion * getContainer() const
ContainerData newBegin(SymbolRef B) const
SVal - This represents a symbolic expression, which can be either an L-value or an R-value...
#define CLANG_ENTO_PROGRAMSTATE_MAP(Key, Value)
Helper for registering a map trait.
SymbolRef getOffset() const
bool isAccessOperator(OverloadedOperatorKind OK)
static IteratorPosition getPosition(const MemRegion *C, SymbolRef Of)
bool isEraseAfterCall(const FunctionDecl *Func)
Dataflow Directional Tag Classes.
OverloadedOperatorKind
Enumeration specifying the different kinds of C++ overloaded operators.
static ContainerData fromBegin(SymbolRef B)
bool operator!=(const IteratorPosition &X) const
bool isRandomIncrOrDecrOperator(OverloadedOperatorKind OK)
bool isInsertCall(const FunctionDecl *Func)
bool operator==(const ContainerData &X) const
ProgramStateRef advancePosition(ProgramStateRef State, const SVal &Iter, OverloadedOperatorKind Op, const SVal &Distance)
X
Add a minimal nested name specifier fixit hint to allow lookup of a tag name from an outer enclosing ...
CLANG_ENTO_PROGRAMSTATE_MAP(const MemRegion *, IteratorPosition) IteratorRegionMapTy
Represents a C++ struct/union/class.
IteratorPosition invalidate() const
bool isEmplaceCall(const FunctionDecl *Func)
ProgramStateRef setIteratorPosition(ProgramStateRef State, const SVal &Val, const IteratorPosition &Pos)
IteratorPosition setTo(SymbolRef NewOf) const
bool compare(ProgramStateRef State, SymbolRef Sym1, SymbolRef Sym2, BinaryOperator::Opcode Opc)
CLANG_ENTO_PROGRAMSTATE_MAP(SymbolRef, IteratorPosition) IteratorSymbolMapTy