package goblint

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

Signatures for analyzers, analysis specifications, and result output.

module GU = Goblintutil
module M = Messages
type fundecs = GoblintCil.fundec list * GoblintCil.fundec list * GoblintCil.fundec list

Analysis starts from lists of functions: start functions, exit functions, and * other functions.

module type SysVar = sig ... end
module type VarType = sig ... end
module Var : sig ... end
module VarF (LD : Printable.S) : sig ... end
module type SpecSysVar = sig ... end
module GVarF (V : SpecSysVar) : sig ... end
module GVarG (G : Lattice.S) (C : Printable.S) : sig ... end
exception Deadcode
module Dom (LD : Lattice.S) : sig ... end

Dom (D) produces D lifted where bottom means dead-code

module ResultNode : Printable.S with type t = MyCFG.node
module type ResultConf = sig ... end
module Result (Range : Printable.S) (C : ResultConf) : sig ... end
val control_spec_c : (module Printable.S) Prelude.ref

Reference to top-level Control Spec context first-class module.

Top-level Control Spec context as static module, which delegates to control_spec_c. This allows using top-level context values inside individual analyses.

type ('d, 'g, 'c, 'v) ctx = {
  1. ask : 'a. 'a Queries.t -> 'a Queries.result;
  2. emit : Events.t -> unit;
  3. node : MyCFG.node;
  4. prev_node : MyCFG.node;
  5. control_context : unit -> ControlSpecC.t;
    (*

    top-level Control Spec context, raises Ctx_failure if missing

    *)
  6. context : unit -> 'c;
    (*

    current Spec context, raises Ctx_failure if missing

    *)
  7. edge : MyCFG.edge;
  8. local : 'd;
  9. global : 'v -> 'g;
  10. spawn : GoblintCil.lval option -> GoblintCil.varinfo -> GoblintCil.exp list -> unit;
  11. split : 'd -> Events.t list -> unit;
  12. sideg : 'v -> 'g -> unit;
}
exception Ctx_failure of string

Failure from ctx, e.g. global initializer

val ctx_failwith : string -> 'a
val ask_of_ctx : ('a, 'b, 'c, 'd) ctx -> Queries.ask

Convert ctx to Queries.ask.

module type Spec = sig ... end
module type MCPA = sig ... end
module type MCPSpec = sig ... end
type analyzed_data = {
  1. solver_data : Obj.t;
}
type increment_data = {
  1. server : bool;
  2. old_data : analyzed_data option;
  3. changes : CompareCIL.change_info;
  4. restarting : VarQuery.t list;
}
val empty_increment_data : ?server:bool -> unit -> increment_data
module type MonSystem = sig ... end

A side-effecting system.

module type EqConstrSys = MonSystem with type 'a m := 'a option

Any system of side-effecting equations over lattices.

module type GlobConstrSys = sig ... end

A side-effecting system with globals.

module type GenericEqBoxIncrSolverBase = functor (S : EqConstrSys) -> functor (H : Goblint_lib.Prelude.Hashtbl.S with type key = S.v) -> sig ... end

A solver is something that can translate a system into a solution (hash-table). Incremental solver has data to be marshaled.

module type IncrSolverArg = sig ... end

(Incremental) solver argument, indicating which postsolving should be performed by the solver.

An incremental solver takes the argument about postsolving.

module type GenericEqBoxSolver = functor (S : EqConstrSys) -> functor (H : Goblint_lib.Prelude.Hashtbl.S with type key = S.v) -> sig ... end

A solver is something that can translate a system into a solution (hash-table)

module type GenericGlobSolver = functor (S : GlobConstrSys) -> functor (LH : Goblint_lib.Prelude.Hashtbl.S with type key = S.LVar.t) -> functor (GH : Goblint_lib.Prelude.Hashtbl.S with type key = S.GVar.t) -> sig ... end

A solver is something that can translate a system into a solution (hash-table)

module ResultType2 (S : Spec) : sig ... end
module StdV : sig ... end
module VarinfoV : sig ... end
module EmptyV : sig ... end
module UnitA : sig ... end
module DefaultSpec : sig ... end

Relatively safe default implementations of some boring Spec functions.

module IdentitySpec : sig ... end