clang 20.0.0git
|
#include "clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h"
Public Member Functions | |
RangedConstraintManager (ExprEngine *EE, SValBuilder &SB) | |
~RangedConstraintManager () override | |
ProgramStateRef | assumeSym (ProgramStateRef State, SymbolRef Sym, bool Assumption) override |
Given a symbolic expression that can be reasoned about, assume that it is true/false and generate the new program state. | |
ProgramStateRef | assumeSymInclusiveRange (ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &From, const llvm::APSInt &To, bool InRange) override |
Given a symbolic expression within the range [From, To], assume that it is true/false and generate the new program state. | |
ProgramStateRef | assumeSymUnsupported (ProgramStateRef State, SymbolRef Sym, bool Assumption) override |
Given a symbolic expression that cannot be reasoned about, assume that it is zero/nonzero and add it directly to the solver state. | |
Public Member Functions inherited from clang::ento::SimpleConstraintManager | |
SimpleConstraintManager (ExprEngine *exprengine, SValBuilder &SB) | |
~SimpleConstraintManager () override | |
Public Member Functions inherited from clang::ento::ConstraintManager | |
ConstraintManager ()=default | |
virtual | ~ConstraintManager () |
virtual bool | haveEqualConstraints (ProgramStateRef S1, ProgramStateRef S2) const =0 |
ProgramStateRef | assume (ProgramStateRef state, DefinedSVal Cond, bool Assumption) |
ProgramStatePair | assumeDual (ProgramStateRef State, DefinedSVal Cond) |
Returns a pair of states (StTrue, StFalse) where the given condition is assumed to be true or false, respectively. | |
ProgramStateRef | assumeInclusiveRange (ProgramStateRef State, NonLoc Value, const llvm::APSInt &From, const llvm::APSInt &To, bool InBound) |
ProgramStatePair | assumeInclusiveRangeDual (ProgramStateRef State, NonLoc Value, const llvm::APSInt &From, const llvm::APSInt &To) |
Returns a pair of states (StInRange, StOutOfRange) where the given value is assumed to be in the range or out of the range, respectively. | |
virtual const llvm::APSInt * | getSymVal (ProgramStateRef state, SymbolRef sym) const |
If a symbol is perfectly constrained to a constant, attempt to return the concrete value. | |
virtual const llvm::APSInt * | getSymMinVal (ProgramStateRef state, SymbolRef sym) const |
Attempt to return the minimal possible value for a given symbol. | |
virtual const llvm::APSInt * | getSymMaxVal (ProgramStateRef state, SymbolRef sym) const |
Attempt to return the minimal possible value for a given symbol. | |
virtual ProgramStateRef | removeDeadBindings (ProgramStateRef state, SymbolReaper &SymReaper)=0 |
Scan all symbols referenced by the constraints. | |
virtual void | printJson (raw_ostream &Out, ProgramStateRef State, const char *NL, unsigned int Space, bool IsDot) const =0 |
virtual void | printValue (raw_ostream &Out, ProgramStateRef State, SymbolRef Sym) |
ConditionTruthVal | isNull (ProgramStateRef State, SymbolRef Sym) |
Convenience method to query the state to see if a symbol is null or not null, or if neither assumption can be made. | |
Protected Member Functions | |
virtual ProgramStateRef | assumeSymRel (ProgramStateRef State, SymbolRef Sym, BinaryOperator::Opcode op, const llvm::APSInt &Int) |
Assume a constraint between a symbolic expression and a concrete integer. | |
virtual ProgramStateRef | assumeSymNE (ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &V, const llvm::APSInt &Adjustment)=0 |
virtual ProgramStateRef | assumeSymEQ (ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &V, const llvm::APSInt &Adjustment)=0 |
virtual ProgramStateRef | assumeSymLT (ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &V, const llvm::APSInt &Adjustment)=0 |
virtual ProgramStateRef | assumeSymGT (ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &V, const llvm::APSInt &Adjustment)=0 |
virtual ProgramStateRef | assumeSymLE (ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &V, const llvm::APSInt &Adjustment)=0 |
virtual ProgramStateRef | assumeSymGE (ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &V, const llvm::APSInt &Adjustment)=0 |
virtual ProgramStateRef | assumeSymWithinInclusiveRange (ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &From, const llvm::APSInt &To, const llvm::APSInt &Adjustment)=0 |
virtual ProgramStateRef | assumeSymOutsideInclusiveRange (ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &From, const llvm::APSInt &To, const llvm::APSInt &Adjustment)=0 |
Protected Member Functions inherited from clang::ento::SimpleConstraintManager | |
virtual ProgramStateRef | assumeSym (ProgramStateRef State, SymbolRef Sym, bool Assumption)=0 |
Given a symbolic expression that can be reasoned about, assume that it is true/false and generate the new program state. | |
virtual ProgramStateRef | assumeSymInclusiveRange (ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &From, const llvm::APSInt &To, bool InRange)=0 |
Given a symbolic expression within the range [From, To], assume that it is true/false and generate the new program state. | |
virtual ProgramStateRef | assumeSymUnsupported (ProgramStateRef State, SymbolRef Sym, bool Assumption)=0 |
Given a symbolic expression that cannot be reasoned about, assume that it is zero/nonzero and add it directly to the solver state. | |
ProgramStateRef | assumeInternal (ProgramStateRef State, DefinedSVal Cond, bool Assumption) override |
Ensures that the DefinedSVal conditional is expressed as a NonLoc by creating boolean casts to handle Loc's. | |
ProgramStateRef | assumeInclusiveRangeInternal (ProgramStateRef State, NonLoc Value, const llvm::APSInt &From, const llvm::APSInt &To, bool InRange) override |
SValBuilder & | getSValBuilder () const |
BasicValueFactory & | getBasicVals () const |
SymbolManager & | getSymbolManager () const |
Protected Member Functions inherited from clang::ento::ConstraintManager | |
virtual ProgramStateRef | assumeInternal (ProgramStateRef state, DefinedSVal Cond, bool Assumption)=0 |
virtual ProgramStateRef | assumeInclusiveRangeInternal (ProgramStateRef State, NonLoc Value, const llvm::APSInt &From, const llvm::APSInt &To, bool InBound)=0 |
virtual bool | canReasonAbout (SVal X) const =0 |
canReasonAbout - Not all ConstraintManagers can accurately reason about all SVal values. | |
virtual ConditionTruthVal | checkNull (ProgramStateRef State, SymbolRef Sym) |
Returns whether or not a symbol is known to be null ("true"), known to be non-null ("false"), or may be either ("underconstrained"). | |
template<typename AssumeFunction > | |
ProgramStatePair | assumeDualImpl (ProgramStateRef &State, AssumeFunction &Assume) |
Additional Inherited Members | |
Public Types inherited from clang::ento::ConstraintManager | |
using | ProgramStatePair = std::pair< ProgramStateRef, ProgramStateRef > |
Protected Attributes inherited from clang::ento::ConstraintManager | |
AssumeStackTy | AssumeStack |
Definition at line 407 of file RangedConstraintManager.h.
|
inline |
Definition at line 409 of file RangedConstraintManager.h.
|
override |
Definition at line 21 of file RangedConstraintManager.cpp.
|
overridevirtual |
Given a symbolic expression that can be reasoned about, assume that it is true/false and generate the new program state.
Implements clang::ento::SimpleConstraintManager.
Definition at line 23 of file RangedConstraintManager.cpp.
References assumeSymEQ(), assumeSymNE(), assumeSymRel(), assumeSymUnsupported(), clang::ento::SimpleConstraintManager::getBasicVals(), clang::ento::SymbolManager::getContext(), clang::ento::BinarySymExpr::getOpcode(), clang::ASTContext::getPointerDiffType(), clang::ento::SimpleConstraintManager::getSymbolManager(), clang::ento::SymbolManager::getSymSymExpr(), clang::BinaryOperator::isComparisonOp(), clang::BinaryOperator::isEqualityOp(), clang::ento::Loc::isLocType(), clang::BinaryOperator::negateComparisonOp(), clang::BinaryOperator::reverseComparisonOp(), and clang::ento::simplify().
Referenced by assumeSymRel().
|
protectedpure virtual |
Referenced by assumeSym(), assumeSymRel(), and assumeSymUnsupported().
|
protectedpure virtual |
Referenced by assumeSymRel().
|
protectedpure virtual |
Referenced by assumeSymRel().
|
overridevirtual |
Given a symbolic expression within the range [From, To], assume that it is true/false and generate the new program state.
This function is used to handle case ranges produced by a language extension for switch case statements.
Implements clang::ento::SimpleConstraintManager.
Definition at line 101 of file RangedConstraintManager.cpp.
References assumeSymOutsideInclusiveRange(), assumeSymWithinInclusiveRange(), clang::ento::APSIntType::convert(), clang::ento::BasicValueFactory::getAPSIntType(), clang::ento::SimpleConstraintManager::getBasicVals(), clang::ento::APSIntType::getBitWidth(), clang::ento::SymExpr::getType(), clang::ento::APSIntType::getZeroValue(), clang::ento::APSIntType::isUnsigned(), and clang::ento::simplify().
|
protectedpure virtual |
Referenced by assumeSymRel().
|
protectedpure virtual |
Referenced by assumeSymRel().
|
protectedpure virtual |
Referenced by assumeSym(), assumeSymRel(), and assumeSymUnsupported().
|
protectedpure virtual |
Referenced by assumeSymInclusiveRange().
|
protectedvirtual |
Assume a constraint between a symbolic expression and a concrete integer.
Definition at line 152 of file RangedConstraintManager.cpp.
References assumeSym(), assumeSymEQ(), assumeSymGE(), assumeSymGT(), assumeSymLE(), assumeSymLT(), assumeSymNE(), clang::ento::APSIntType::convert(), clang::ento::BasicValueFactory::getAPSIntType(), clang::ento::SimpleConstraintManager::getBasicVals(), clang::ento::APSIntType::getBitWidth(), clang::ento::SymExpr::getType(), clang::ento::APSIntType::getZeroValue(), clang::BinaryOperator::isComparisonOp(), and clang::ento::APSIntType::isUnsigned().
Referenced by assumeSym().
|
overridevirtual |
Given a symbolic expression that cannot be reasoned about, assume that it is zero/nonzero and add it directly to the solver state.
Implements clang::ento::SimpleConstraintManager.
Definition at line 133 of file RangedConstraintManager.cpp.
References assumeSymEQ(), assumeSymNE(), clang::ento::SimpleConstraintManager::getBasicVals(), clang::ento::SymExpr::getType(), clang::Type::isIntegralOrEnumerationType(), clang::ento::simplify(), and clang::T.
Referenced by assumeSym().
|
protectedpure virtual |
Referenced by assumeSymInclusiveRange().