clang  3.9.0
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
clang::ento::ConstraintManager Class Referenceabstract

#include <ConstraintManager.h>

Inheritance diagram for clang::ento::ConstraintManager:
[legend]
Collaboration diagram for clang::ento::ConstraintManager:
[legend]

Public Types

typedef std::pair
< ProgramStateRef,
ProgramStateRef
ProgramStatePair
 

Public Member Functions

 ConstraintManager ()
 
virtual ~ConstraintManager ()
 
virtual ProgramStateRef assume (ProgramStateRef state, DefinedSVal Cond, bool Assumption)=0
 
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. More...
 
virtual ProgramStateRef assumeWithinInclusiveRange (ProgramStateRef State, NonLoc Value, const llvm::APSInt &From, const llvm::APSInt &To, bool InBound)=0
 
virtual ProgramStatePair assumeWithinInclusiveRangeDual (ProgramStateRef State, NonLoc Value, const llvm::APSInt &From, const llvm::APSInt &To)
 
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. More...
 
virtual ProgramStateRef removeDeadBindings (ProgramStateRef state, SymbolReaper &SymReaper)=0
 
virtual void print (ProgramStateRef state, raw_ostream &Out, const char *nl, const char *sep)=0
 
virtual void EndPath (ProgramStateRef state)
 
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. More...
 

Protected Member Functions

virtual bool canReasonAbout (SVal X) const =0
 canReasonAbout - Not all ConstraintManagers can accurately reason about all SVal values. More...
 
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"). More...
 

Protected Attributes

bool NotifyAssumeClients
 A flag to indicate that clients should be notified of assumptions. More...
 

Detailed Description

Definition at line 62 of file ConstraintManager.h.

Member Typedef Documentation

Definition at line 71 of file ConstraintManager.h.

Constructor & Destructor Documentation

clang::ento::ConstraintManager::ConstraintManager ( )
inline

Definition at line 64 of file ConstraintManager.h.

ConstraintManager::~ConstraintManager ( )
virtual

Definition at line 19 of file ConstraintManager.cpp.

Member Function Documentation

virtual ProgramStateRef clang::ento::ConstraintManager::assume ( ProgramStateRef  state,
DefinedSVal  Cond,
bool  Assumption 
)
pure virtual
ProgramStatePair clang::ento::ConstraintManager::assumeDual ( ProgramStateRef  State,
DefinedSVal  Cond 
)
inline

Returns a pair of states (StTrue, StFalse) where the given condition is assumed to be true or false, respectively.

Definition at line 75 of file ConstraintManager.h.

References assume().

Referenced by checkNull().

virtual ProgramStateRef clang::ento::ConstraintManager::assumeWithinInclusiveRange ( ProgramStateRef  State,
NonLoc  Value,
const llvm::APSInt &  From,
const llvm::APSInt &  To,
bool  InBound 
)
pure virtual
virtual ProgramStatePair clang::ento::ConstraintManager::assumeWithinInclusiveRangeDual ( ProgramStateRef  State,
NonLoc  Value,
const llvm::APSInt &  From,
const llvm::APSInt &  To 
)
inlinevirtual

Definition at line 108 of file ConstraintManager.h.

References assumeWithinInclusiveRange().

virtual bool clang::ento::ConstraintManager::canReasonAbout ( SVal  X) const
protectedpure virtual

canReasonAbout - Not all ConstraintManagers can accurately reason about all SVal values.

This method returns true if the ConstraintManager can reasonably handle a given SVal value. This is typically queried by ExprEngine to determine if the value should be replaced with a conjured symbolic value in order to recover some precision.

Implemented in clang::ento::SimpleConstraintManager.

ConditionTruthVal ConstraintManager::checkNull ( ProgramStateRef  State,
SymbolRef  Sym 
)
protectedvirtual

Returns whether or not a symbol is known to be null ("true"), known to be non-null ("false"), or may be either ("underconstrained").

Definition at line 28 of file ConstraintManager.cpp.

References assumeDual(), getLocFromSymbol(), clang::ento::SymExpr::getType(), clang::ento::Loc::isLocType(), and P.

Referenced by isNull().

virtual void clang::ento::ConstraintManager::EndPath ( ProgramStateRef  state)
inlinevirtual

Definition at line 149 of file ConstraintManager.h.

virtual const llvm::APSInt* clang::ento::ConstraintManager::getSymVal ( ProgramStateRef  state,
SymbolRef  sym 
) const
inlinevirtual

If a symbol is perfectly constrained to a constant, attempt to return the concrete value.

Note that a ConstraintManager is not obligated to return a concretized value for a symbol, even if it is perfectly constrained.

Definition at line 136 of file ConstraintManager.h.

Referenced by clang::ento::ProgramState::getSVal().

ConditionTruthVal clang::ento::ConstraintManager::isNull ( ProgramStateRef  State,
SymbolRef  Sym 
)
inline

Convenience method to query the state to see if a symbol is null or not null, or if neither assumption can be made.

Definition at line 153 of file ConstraintManager.h.

References checkNull(), and NotifyAssumeClients.

Referenced by didPreviousFreeFail(), and isLeaked().

virtual void clang::ento::ConstraintManager::print ( ProgramStateRef  state,
raw_ostream &  Out,
const char *  nl,
const char *  sep 
)
pure virtual
virtual ProgramStateRef clang::ento::ConstraintManager::removeDeadBindings ( ProgramStateRef  state,
SymbolReaper SymReaper 
)
pure virtual

Member Data Documentation

bool clang::ento::ConstraintManager::NotifyAssumeClients
protected

A flag to indicate that clients should be notified of assumptions.

By default this is the case, but sometimes this needs to be restricted to avoid infinite recursions within the ConstraintManager.

Note that this flag allows the ConstraintManager to be re-entrant, but not thread-safe.

Definition at line 166 of file ConstraintManager.h.

Referenced by clang::ento::SimpleConstraintManager::assume(), and isNull().


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