package goblint

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

Access analyzer without base --- this is the new standard

include module type of struct include Analyses.DefaultSpec end

Relatively safe default implementations of some boring Spec functions.

type marshal = unit
val finalize : unit -> unit
val should_join : 'a -> 'b -> bool
val vdecl : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e -> 'f
val asm : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e
val skip : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e
val morphstate : 'a -> 'b -> 'c
val sync : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e -> 'f
val access : 'a -> 'b -> unit
val name : unit -> string
module D = Lattice.Unit
module C = Lattice.Unit
module V : sig ... end
val collect_local : bool Prelude.Ana.ref
val init : 'a -> unit
val do_access : (D.t, G.t, C.t, V.t) Analyses.ctx -> AccessKind.t -> bool -> Prelude.Ana.exp -> unit
val access_one_top : ?force:bool -> ?deref:bool -> (D.t, G.t, C.t, V.t) Analyses.ctx -> AccessKind.t -> bool -> Prelude.Ana.exp -> unit

Three access levels:

  1. deref=false, reach=false - Access exp without dereferencing, used for all normal reads and all function call arguments.
  2. deref=true, reach=false - Access exp by dereferencing once (may-point-to), used for lval writes and shallow special accesses.
  3. deref=true, reach=true - Access exp by dereferencing transitively (reachable), used for deep special accesses.
val startstate : 'a -> unit

We just lift start state, global and dependency functions:

val threadenter : 'a -> 'b -> 'c -> 'd -> unit list
val exitstate : 'a -> unit
val context : 'a -> 'b -> unit

Transfer functions:

val branch : (D.t, G.t, C.t, V.t) Analyses.ctx -> Prelude.Ana.exp -> 'a -> D.t
val return : (D.t, G.t, C.t, V.t) Analyses.ctx -> Prelude.Ana.exp option -> 'a -> D.t
val body : (D.t, 'a, 'b, 'c) Analyses.ctx -> 'd -> D.t
val enter : (D.t, 'a, 'b, 'c) Analyses.ctx -> 'd -> 'e -> 'f -> (D.t * D.t) list
val combine : (D.t, G.t, C.t, V.t) Analyses.ctx -> Prelude.Ana.lval option -> Prelude.Ana.exp -> 'a -> Prelude.Ana.exp list -> 'b -> 'c -> 'd
val threadspawn : (D.t, G.t, C.t, V.t) Analyses.ctx -> Prelude.Ana.lval option -> 'a -> 'b -> 'c -> D.t
val query : ('b, G.t, 'c, MyCFG.node) Analyses.ctx -> 'a Queries.t -> 'a0 Queries.result
val event : (unit, G.t, 'a, MyCFG.node) Analyses.ctx -> Events.t -> 'b -> unit