clang 18.0.0git

Supplements Environment
with nonstandard comparison and join operations.
More...
#include "clang/Analysis/FlowSensitive/DataflowEnvironment.h"
Public Member Functions  
virtual  ~ValueModel ()=default 
virtual ComparisonResult  compare (QualType Type, const Value &Val1, const Environment &Env1, const Value &Val2, const Environment &Env2) 
Returns: Same : Val1 is equivalent to Val2 , according to the model.  
virtual bool  merge (QualType Type, const Value &Val1, const Environment &Env1, const Value &Val2, const Environment &Env2, Value &MergedVal, Environment &MergedEnv) 
Modifies MergedVal to approximate both Val1 and Val2 .  
virtual Value *  widen (QualType Type, Value &Prev, const Environment &PrevEnv, Value &Current, Environment &CurrentEnv) 
This function may widen the current value – replace it with an approximation that can reach a fixed point more quickly than iterated application of the transfer function alone.  
Supplements Environment
with nonstandard comparison and join operations.
Definition at line 58 of file DataflowEnvironment.h.

virtualdefault 

inlinevirtual 
Returns: Same
: Val1
is equivalent to Val2
, according to the model.
Different
: Val1
is distinct from Val2
, according to the model. Unknown
: The model can't determine a relationship between Val1
and Val2
.
Requirements:
Val1
and Val2
must be distinct.
Val1
and Val2
must model values of type Type
.
Val1
and Val2
must be assigned to the same storage location in Env1
and Env2
respectively.
Reimplemented in clang::dataflow::UncheckedOptionalAccessModel.
Definition at line 76 of file DataflowEnvironment.h.
References clang::dataflow::Unknown.
Referenced by clang::dataflow::compareDistinctValues(), and widen().

inlinevirtual 
Modifies MergedVal
to approximate both Val1
and Val2
.
This could be a strict lattice join or a more general widening operation.
If this function returns true, MergedVal
will be assigned to a storage location of type Type
in MergedEnv
.
Env1
and Env2
can be used to query child values and path condition implications of Val1
and Val2
respectively.
Requirements:
Val1
and Val2
must be distinct.
Val1
, Val2
, and MergedVal
must model values of type Type
.
Val1
and Val2
must be assigned to the same storage location in Env1
and Env2
respectively.
Reimplemented in clang::dataflow::UncheckedOptionalAccessModel.
Definition at line 101 of file DataflowEnvironment.h.
Referenced by clang::dataflow::mergeDistinctValues().

inlinevirtual 
This function may widen the current value – replace it with an approximation that can reach a fixed point more quickly than iterated application of the transfer function alone.
The previous value is provided to inform the choice of widened value. The function must also serve as a comparison operation, by indicating whether the widened value is equivalent to the previous value.
Returns either:
nullptr
, if this value is not of interest to the model, or
&Prev
, if the widened value is equivalent to Prev
, or
A nonnull value that approximates Current
. Prev
is available to inform the chosen approximation.
PrevEnv
and CurrentEnv
can be used to query child values and path condition implications of Prev
and Current
, respectively.
Requirements:
Prev
and Current
must model values of type Type
.
Prev
and Current
must be assigned to the same storage location in PrevEnv
and CurrentEnv
, respectively.
Reimplemented in clang::dataflow::UncheckedOptionalAccessModel.
Definition at line 133 of file DataflowEnvironment.h.
References compare(), clang::dataflow::Different, clang::dataflow::Same, and clang::dataflow::Unknown.
Referenced by clang::dataflow::widenDistinctValues().