clang 22.0.0git
clang::ento::RangedConstraintManager Class Referenceabstract

#include "clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h"

Inheritance diagram for clang::ento::RangedConstraintManager:
[legend]

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
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
SValBuildergetSValBuilder () const
BasicValueFactorygetBasicVals () const
SymbolManagergetSymbolManager () const
Protected Member Functions inherited from clang::ento::ConstraintManager
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

Detailed Description

Definition at line 407 of file RangedConstraintManager.h.

Constructor & Destructor Documentation

◆ RangedConstraintManager()

clang::ento::RangedConstraintManager::RangedConstraintManager ( ExprEngine * EE,
SValBuilder & SB )
inline

◆ ~RangedConstraintManager()

clang::ento::RangedConstraintManager::~RangedConstraintManager ( )
override

Definition at line 21 of file RangedConstraintManager.cpp.

Member Function Documentation

◆ assumeSym()

◆ assumeSymEQ()

virtual ProgramStateRef clang::ento::RangedConstraintManager::assumeSymEQ ( ProgramStateRef State,
SymbolRef Sym,
const llvm::APSInt & V,
const llvm::APSInt & Adjustment )
protectedpure virtual

References V.

Referenced by assumeSym(), assumeSymRel(), and assumeSymUnsupported().

◆ assumeSymGE()

virtual ProgramStateRef clang::ento::RangedConstraintManager::assumeSymGE ( ProgramStateRef State,
SymbolRef Sym,
const llvm::APSInt & V,
const llvm::APSInt & Adjustment )
protectedpure virtual

References V.

Referenced by assumeSymRel().

◆ assumeSymGT()

virtual ProgramStateRef clang::ento::RangedConstraintManager::assumeSymGT ( ProgramStateRef State,
SymbolRef Sym,
const llvm::APSInt & V,
const llvm::APSInt & Adjustment )
protectedpure virtual

References V.

Referenced by assumeSymRel().

◆ assumeSymInclusiveRange()

ProgramStateRef clang::ento::RangedConstraintManager::assumeSymInclusiveRange ( ProgramStateRef State,
SymbolRef Sym,
const llvm::APSInt & From,
const llvm::APSInt & To,
bool InRange )
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().

◆ assumeSymLE()

virtual ProgramStateRef clang::ento::RangedConstraintManager::assumeSymLE ( ProgramStateRef State,
SymbolRef Sym,
const llvm::APSInt & V,
const llvm::APSInt & Adjustment )
protectedpure virtual

References V.

Referenced by assumeSymRel().

◆ assumeSymLT()

virtual ProgramStateRef clang::ento::RangedConstraintManager::assumeSymLT ( ProgramStateRef State,
SymbolRef Sym,
const llvm::APSInt & V,
const llvm::APSInt & Adjustment )
protectedpure virtual

References V.

Referenced by assumeSymRel().

◆ assumeSymNE()

virtual ProgramStateRef clang::ento::RangedConstraintManager::assumeSymNE ( ProgramStateRef State,
SymbolRef Sym,
const llvm::APSInt & V,
const llvm::APSInt & Adjustment )
protectedpure virtual

References V.

Referenced by assumeSym(), assumeSymRel(), and assumeSymUnsupported().

◆ assumeSymOutsideInclusiveRange()

virtual ProgramStateRef clang::ento::RangedConstraintManager::assumeSymOutsideInclusiveRange ( ProgramStateRef State,
SymbolRef Sym,
const llvm::APSInt & From,
const llvm::APSInt & To,
const llvm::APSInt & Adjustment )
protectedpure virtual

Referenced by assumeSymInclusiveRange().

◆ assumeSymRel()

◆ assumeSymUnsupported()

ProgramStateRef clang::ento::RangedConstraintManager::assumeSymUnsupported ( ProgramStateRef State,
SymbolRef Sym,
bool Assumption )
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::ento::simplify(), clang::T, and clang::Zero.

Referenced by assumeSym().

◆ assumeSymWithinInclusiveRange()

virtual ProgramStateRef clang::ento::RangedConstraintManager::assumeSymWithinInclusiveRange ( ProgramStateRef State,
SymbolRef Sym,
const llvm::APSInt & From,
const llvm::APSInt & To,
const llvm::APSInt & Adjustment )
protectedpure virtual

Referenced by assumeSymInclusiveRange().


The documentation for this class was generated from the following files: