Module type Analyses.Spec

module D : Lattice.S
module G : Lattice.S
module C : Printable.S
module V : SpecSysVar

Global constraint variables.

module P : DisjointDomain.Representative with type elt := D.t

Global constraint variables.

val name : unit -> string
type marshal

Auxiliary data (outside of solution domains) that needs to be marshaled and unmarshaled. This includes: * hashtables, * varinfos (create_var), * RichVarinfos.

val init : marshal option -> unit

Initialize using unmarshaled auxiliary data (if present).

val finalize : unit -> marshal

Finalize and return auxiliary data to be marshaled.

val startstate : GoblintCil.varinfo -> D.t
val morphstate : GoblintCil.varinfo -> D.t -> D.t
val exitstate : GoblintCil.varinfo -> D.t
val context : GoblintCil.fundec -> D.t -> C.t
val sync : (D.t, G.t, C.t, V.t) ctx -> [ `Normal | `Join | `Return ] -> D.t
val query : (D.t, G.t, C.t, V.t) ctx -> 'a Queries.t -> 'a Queries.result
val assign : (D.t, G.t, C.t, V.t) ctx -> GoblintCil.lval -> GoblintCil.exp -> D.t

A transfer function which handles the assignment of a rval to a lval, i.e., it handles program points of the form "lval = rval;"

val vdecl : (D.t, G.t, C.t, V.t) ctx -> GoblintCil.varinfo -> D.t

A transfer function used for declaring local variables. By default only for variable-length arrays (VLAs).

val branch : (D.t, G.t, C.t, V.t) ctx -> GoblintCil.exp -> bool -> D.t

A transfer function which handles conditional branching yielding the truth value passed as a boolean argument

val body : (D.t, G.t, C.t, V.t) ctx -> GoblintCil.fundec -> D.t

A transfer function which handles going from the start node of a function (fundec) into its function body. Meant to handle, e.g., initialization of local variables

val return : (D.t, G.t, C.t, V.t) ctx -> GoblintCil.exp option -> GoblintCil.fundec -> D.t

A transfer function which handles the return statement, i.e., "return exp" or "return" in the passed function (fundec)

val asm : (D.t, G.t, C.t, V.t) ctx -> D.t

A transfer function meant to handle inline assembler program points

val skip : (D.t, G.t, C.t, V.t) ctx -> D.t

A transfer function which works as the identity function, i.e., it skips and does nothing. Used for empty loops.

val special : (D.t, G.t, C.t, V.t) ctx -> GoblintCil.lval option -> GoblintCil.varinfo -> GoblintCil.exp list -> D.t

A transfer function which, for a call to a special function f "lval = f(args)" or "f(args)", computes the caller state after the function call

val enter : (D.t, G.t, C.t, V.t) ctx -> GoblintCil.lval option -> GoblintCil.fundec -> GoblintCil.exp list -> (D.t * D.t) list

For a function call "lval = f(args)" or "f(args)", enter returns a caller state, and the initial state of the callee. In enter, the caller state can usually be returned unchanged, as combine_env and combine_assign (below) will compute the caller state after the function call, given the return state of the callee

val combine_env : (D.t, G.t, C.t, V.t) ctx -> GoblintCil.lval option -> GoblintCil.exp -> GoblintCil.fundec -> GoblintCil.exp list -> C.t option -> D.t -> Queries.ask -> D.t

Combine environment (global variables, mutexes, etc) between local state (first component from enter) and function return.

This shouldn't yet assign to the lval.

val combine_assign : (D.t, G.t, C.t, V.t) ctx -> GoblintCil.lval option -> GoblintCil.exp -> GoblintCil.fundec -> GoblintCil.exp list -> C.t option -> D.t -> Queries.ask -> D.t

Combine return value assignment to local state (result from combine_env) and function return.

This should only assign to the lval.

val paths_as_set : (D.t, G.t, C.t, V.t) ctx -> D.t list
val threadenter : (D.t, G.t, C.t, V.t) ctx -> multiple:bool -> GoblintCil.lval option -> GoblintCil.varinfo -> GoblintCil.exp list -> D.t list

Returns initial state for created thread.

val threadspawn : (D.t, G.t, C.t, V.t) ctx -> multiple:bool -> GoblintCil.lval option -> GoblintCil.varinfo -> GoblintCil.exp list -> (D.t, G.t, C.t, V.t) ctx -> D.t

Updates the local state of the creator thread using initial state of created thread.

val event : (D.t, G.t, C.t, V.t) ctx -> Events.t -> (D.t, G.t, C.t, V.t) ctx -> D.t