Frama-C:
Plug-ins:
Libraries:

Frama-C API - Eval

type state = Dom.t

State of abstract domain.

type context = Ctx.t

Context

type value = Val.t

Numeric values to which the expressions are evaluated.

type origin = Dom.origin

Origin of values.

type loc = Loc.location

Location of an lvalue.

module Valuation : Eva.Eval.Valuation with type value = value and type origin = origin and type loc = loc

Results of an evaluation: the results of all intermediate calculation (the value of each expression and the location of each lvalue) are cached here. See Eval for more details.

val to_domain_valuation : Valuation.t -> (value, loc, origin) Eva__.Abstract_domain.valuation

Evaluation functions store the results of an evaluation into Valuation.t maps. Abstract domains read these results from Abstract_domain.valuation records. This function converts the former into the latter.

val evaluate : ?valuation:Valuation.t -> ?reduction:bool -> ?subdivnb:int -> state -> Eva.Eval.exp -> (Valuation.t * value) Eva.Eval.evaluated

evaluate ~valuation state expr evaluates the expression expr in the state state, and returns the pair result, alarms, where:

  • alarms are the set of alarms ensuring the soundness of the evaluation;
  • result is either `Bottom if the evaluation leads to an error, or `Value (valuation, value), where value is the numeric value computed for the expression expr, and valuation contains all the intermediate results of the evaluation.

Optional arguments are:

  • valuation is a cache of already computed expressions; empty by default.
  • reduction allows the deactivation of the backward reduction performed after the forward evaluation; true by default.
  • subdivnb is the maximum number of subdivisions performed on non-linear sub-expressions of expr. If a lvalue occurs several times in expr, its value can be split up to subdivnb times to gain more precision. Set to the value of the option -eva-subdivide-non-linear by default.
val copy_lvalue : ?valuation:Valuation.t -> ?subdivnb:int -> state -> Eva.Eval.lval -> (Valuation.t * value Eva.Eval.flagged_value) Eva.Eval.evaluated

Computes the value of a lvalue, with possible indeterminateness: the returned value may be uninitialized, or contain escaping addresses. Also returns the alarms resulting of the evaluation of the lvalue location, and a valuation containing all the intermediate results of the evaluation. The valuation argument is a cache of already computed expressions. It is empty by default. subdivnb is the maximum number of subdivisions performed on non-linear expressions.

val lvaluate : ?valuation:Valuation.t -> ?subdivnb:int -> for_writing:bool -> state -> Eva.Eval.lval -> (Valuation.t * loc) Eva.Eval.evaluated

lvaluate ~valuation ~for_writing state lval evaluates the left value lval in the state state. Same general behavior as evaluate above but evaluates the lvalue into a location and its type. The boolean for_writing indicates whether the lvalue is evaluated to be read or written. It is useful for the emission of the alarms, and for the reduction of the location. subdivnb is the maximum number of subdivisions performed on non-linear expressions (including the possible pointer and offset of the lvalue).

val reduce : ?valuation:Valuation.t -> state -> Eva.Eval.exp -> bool -> Valuation.t Eva.Eval.evaluated

reduce ~valuation state expr positive evaluates the expression expr in the state state, and then reduces the valuation such that the expression expr evaluates to a zero or a non-zero value, according to positive. By default, the empty valuation is used.

assume ~valuation state expr value assumes in the valuation that the expression expr has the value value in the state state, and backward propagates this information to the subterm of expr. If expr has not been already evaluated in the valuation, its forward evaluation takes place first, but the alarms are dismissed. By default, the empty valuation is used. The function returns the updated valuation, or bottom if it discovers a contradiction.

val eval_function_exp : ?subdivnb:int -> Eva.Eval.exp -> ?args:Eva.Eval.exp list -> state -> (Frama_c_kernel.Kernel_function.t * Valuation.t) list Eva.Eval.evaluated

Evaluation of the function argument of a Call constructor

val interpret_truth : alarm:(unit -> Frama_c_kernel.Alarms.t) -> 'a -> [ `False | `Unknown of 'a | `True | `TrueReduced of 'a | `Unreachable ] -> 'a Eva.Eval.evaluated