clang: lib/StaticAnalyzer/Checkers/Iterator.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13#ifndef LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_ITERATOR_H

14#define LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_ITERATOR_H

15

19

21namespace ento {

22namespace iterator {

23

24

25

27private:

28

29

31

32

33 const bool Valid;

34

35

37

39 : Cont(C), Valid(V), Offset(Of) {}

40

41public:

43 bool isValid() const { return Valid; }

45

48 }

49

52 }

53

56 }

57

60 }

61

63 return Cont == X.Cont && Valid == X.Valid && Offset == X.Offset;

64 }

65

67

68 void Profile(llvm::FoldingSetNodeID &ID) const {

69 ID.AddPointer(Cont);

70 ID.AddInteger(Valid);

71 ID.Add(Offset);

72 }

73};

74

75

77private:

79

81

82public:

85 }

86

89 }

90

93

95

97

99 return Begin == X.Begin && End == X.End;

100 }

101

103

104 void Profile(llvm::FoldingSetNodeID &ID) const {

106 ID.Add(End);

107 }

108};

109

113

120

121}

122

123template<>

126 static void *GDMIndex() { static int Index; return &Index; }

127};

128

129template<>

132 static void *GDMIndex() { static int Index; return &Index; }

133};

134

135template<>

138 static void *GDMIndex() { static int Index; return &Index; }

139};

140

141namespace iterator {

142

163 const MemRegion *Cont);

166 const IteratorPosition &Pos);

168 const MemRegion *Cont, const Stmt *S,

170 unsigned blockCount);

174 long Scale);

179

180}

181}

182}

183

184#endif

#define CLANG_ENTO_PROGRAMSTATE_MAP(Key, Value)

Helper for registering a map trait.

Represents a C++ struct/union/class.

Represents a function declaration or definition.

It wraps the AnalysisDeclContext to represent both the call stack with the help of StackFrameContext ...

A (possibly-)qualified type.

Stmt - This represents one statement.

The base class of the type hierarchy.

MemRegion - The root abstract class for all memory regions.

bool isEraseCall(const FunctionDecl *Func)

CLANG_ENTO_PROGRAMSTATE_MAP(const MemRegion *, ContainerData) ContainerMapTy

const IteratorPosition * getIteratorPosition(ProgramStateRef State, SVal Val)

bool isIterator(const CXXRecordDecl *CRD)

bool isInsertCall(const FunctionDecl *Func)

bool isIteratorType(const QualType &Type)

ProgramStateRef createIteratorPosition(ProgramStateRef State, SVal Val, const MemRegion *Cont, const Stmt *S, const LocationContext *LCtx, unsigned blockCount)

bool isAccessOperator(OverloadedOperatorKind OK)

bool isEmplaceCall(const FunctionDecl *Func)

CLANG_ENTO_PROGRAMSTATE_MAP(SymbolRef, IteratorPosition) IteratorSymbolMapTy

bool isEraseAfterCall(const FunctionDecl *Func)

ProgramStateRef assumeNoOverflow(ProgramStateRef State, SymbolRef Sym, long Scale)

CLANG_ENTO_PROGRAMSTATE_MAP(const MemRegion *, IteratorPosition) IteratorRegionMapTy

bool isRandomIncrOrDecrOperator(OverloadedOperatorKind OK)

ProgramStateRef advancePosition(ProgramStateRef State, SVal Iter, OverloadedOperatorKind Op, SVal Distance)

const ContainerData * getContainerData(ProgramStateRef State, const MemRegion *Cont)

bool compare(ProgramStateRef State, SymbolRef Sym1, SymbolRef Sym2, BinaryOperator::Opcode Opc)

bool isDecrementOperator(OverloadedOperatorKind OK)

bool isComparisonOperator(OverloadedOperatorKind OK)

ProgramStateRef setIteratorPosition(ProgramStateRef State, SVal Val, const IteratorPosition &Pos)

bool isDereferenceOperator(OverloadedOperatorKind OK)

bool isIncrementOperator(OverloadedOperatorKind OK)

IntrusiveRefCntPtr< const ProgramState > ProgramStateRef

const SymExpr * SymbolRef

The JSON file list parser is used to communicate input to InstallAPI.

OverloadedOperatorKind

Enumeration specifying the different kinds of C++ overloaded operators.

ContainerData newEnd(SymbolRef E) const

SymbolRef getBegin() const

static ContainerData fromEnd(SymbolRef E)

ContainerData newBegin(SymbolRef B) const

bool operator==(const ContainerData &X) const

void Profile(llvm::FoldingSetNodeID &ID) const

bool operator!=(const ContainerData &X) const

static ContainerData fromBegin(SymbolRef B)

IteratorPosition reAssign(const MemRegion *NewCont) const

bool operator!=(const IteratorPosition &X) const

IteratorPosition setTo(SymbolRef NewOf) const

bool operator==(const IteratorPosition &X) const

SymbolRef getOffset() const

const MemRegion * getContainer() const

static IteratorPosition getPosition(const MemRegion *C, SymbolRef Of)

void Profile(llvm::FoldingSetNodeID &ID) const

IteratorPosition invalidate() const