clang 19.0.0git
Classes | Macros | Functions
RangeConstraintManager.cpp File Reference
#include "clang/Basic/JsonSupport.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/APSIntType.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/SValVisitor.h"
#include "llvm/ADT/FoldingSet.h"
#include "llvm/ADT/ImmutableSet.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <iterator>
#include <optional>
#include "clang/StaticAnalyzer/Core/PathSensitive/Symbols.def"

Go to the source code of this file.

Classes

class  OperatorRelationsTable
 

Macros

#define DISPATCH(CLASS)   return assign##CLASS##Impl(cast<CLASS>(Sym), Constraint)
 
#define ASSIGN(CLASS, TO, SYM, CONSTRAINT)
 
#define SYMBOL(Id, Parent)
 
#define DEFAULT_ASSIGN(Id)
 
#define CONSTRAINT_DISPATCH(Id)
 
#define SYMBOL(Id, Parent)
 
#define ABSTRACT_SYMBOL(Id, Parent)   SYMBOL(Id, Parent)
 

Functions

template<typename T >
void swapIterators (T &First, T &FirstEnd, T &Second, T &SecondEnd)
 
ProgramStateRef reAssume (ProgramStateRef State, const RangeSet *Constraint, SVal TheValue)
 
static std::string toString (const SymbolRef &Sym)
 
static std::string toString (ProgramStateRef State, EquivalenceClass Class)
 

Macro Definition Documentation

◆ ABSTRACT_SYMBOL

#define ABSTRACT_SYMBOL (   Id,
  Parent 
)    SYMBOL(Id, Parent)

Definition at line 2036 of file RangeConstraintManager.cpp.

◆ ASSIGN

#define ASSIGN (   CLASS,
  TO,
  SYM,
  CONSTRAINT 
)
Value:
if (!static_cast<Derived *>(this)->assign##CLASS##To##TO(SYM, CONSTRAINT)) \
return false

Definition at line 1989 of file RangeConstraintManager.cpp.

◆ CONSTRAINT_DISPATCH

#define CONSTRAINT_DISPATCH (   Id)
Value:
if (const llvm::APSInt *Const = Constraint.getConcreteValue()) { \
ASSIGN(Id, Const, Sym, *Const); \
} \
if (Constraint.size() == 1) { \
ASSIGN(Id, Range, Sym, *Constraint.begin()); \
} \
ASSIGN(Id, RangeSet, Sym, Constraint)
int Id
Definition: ASTDiff.cpp:190
persistent set of non-overlapping ranges.
A Range represents the closed range [from, to].

Definition at line 2018 of file RangeConstraintManager.cpp.

◆ DEFAULT_ASSIGN

#define DEFAULT_ASSIGN (   Id)
Value:
bool assign##Id##To##RangeSet(const Id *Sym, RangeSet Constraint) { \
return true; \
} \
bool assign##Id##To##Range(const Id *Sym, Range Constraint) { return true; } \
bool assign##Id##To##Const(const Id *Sym, Const Constraint) { return true; }
bool Const(InterpState &S, CodePtr OpPC, const T &Arg)
Definition: Interp.h:928

Definition at line 2007 of file RangeConstraintManager.cpp.

◆ DISPATCH

#define DISPATCH (   CLASS)    return assign##CLASS##Impl(cast<CLASS>(Sym), Constraint)

Definition at line 1987 of file RangeConstraintManager.cpp.

◆ SYMBOL [1/2]

#define SYMBOL (   Id,
  Parent 
)
Value:
case SymExpr::Id##Kind: \
DISPATCH(Id);

Definition at line 2030 of file RangeConstraintManager.cpp.

◆ SYMBOL [2/2]

#define SYMBOL (   Id,
  Parent 
)
Value:
bool assign##Id##Impl(const Id *Sym, RangeSet Constraint) { \
CONSTRAINT_DISPATCH(Id); \
DISPATCH(Parent); \
} \
DEFAULT_ASSIGN(Id)
NodeId Parent
Definition: ASTDiff.cpp:191

Definition at line 2030 of file RangeConstraintManager.cpp.

Function Documentation

◆ reAssume()

ProgramStateRef reAssume ( ProgramStateRef  State,
const RangeSet Constraint,
SVal  TheValue 
)

◆ swapIterators()

template<typename T >
void swapIterators ( T &  First,
T &  FirstEnd,
T &  Second,
T &  SecondEnd 
)

Definition at line 161 of file RangeConstraintManager.cpp.

References clang::First.

◆ toString() [1/2]

static std::string toString ( const SymbolRef Sym)
static

Definition at line 3281 of file RangeConstraintManager.cpp.

References clang::ento::SymExpr::dumpToStream().

◆ toString() [2/2]

static std::string toString ( ProgramStateRef  State,
EquivalenceClass  Class 
)
static

Definition at line 3334 of file RangeConstraintManager.cpp.

References clang::Class, and toString().