package goblint
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=999272bfbd3b9b96fcd58987b237ac6e9fa6d92ef935cc89f1ea2b4205185141
sha512=f3bf6ab71cf8c258d3290da4bf9f6fe42d7c671822e0efeb0fc50afdff078ab15e352237e5c1db31c5aa3a9d430691268ed2e5e00da10f2615835f672f91683d
doc/goblint.lib/Base/MainFunctor/index.html
Module Base.MainFunctor
Parameters
module Priv : BasePriv.Smodule RVEval : BaseDomain.ExpEvaluator with type t = BaseComponents(Priv.D).tSignature
include module type of struct include Analyses.DefaultSpec end
val intrpt : ('a, 'b, 'c) Analyses.ctx -> 'aval asm : ('a, 'b, 'c) Analyses.ctx -> 'aval skip : ('a, 'b, 'c) Analyses.ctx -> 'amodule Dom : sig ... endtype t = Dom.tmodule G = Priv.Gmodule D = Dommodule C = Dommodule V = Basetype.Variablestype extra = (Prelude.Ana.varinfo * Offs.t * bool) listtype store = D.ttype value = VD.ttype address = AD.tval startstate : 'a -> storeval otherstate : 'a -> storeval exitstate : 'a -> storeval return_varstore : Prelude.Ana.varinfo Prelude.Ana.refval return_varinfo : unit -> Prelude.Ana.varinfoval return_lval : unit -> Prelude.Ana.lvalval heap_var : ('a, 'b, 'c) Analyses.ctx -> Basetype.Variables.tval char_array : (Prelude.Ana.lval, Prelude.Ana.bytes) Prelude.Ana.Hashtbl.tval unop_ID : Prelude.Ana.unop -> ID.t -> ID.tval evalunop : Prelude.Ana.unop -> Cil.typ -> [> `Bot | `Int of ID.t ] -> VD.tval binop_ID : Cil.ikind -> Prelude.Ana.binop -> ID.t -> ID.t -> ID.tval evalbinop :
Q.ask ->
store ->
Prelude.Ana.binop ->
Prelude.Ana.typ ->
value ->
Prelude.Ana.typ ->
value ->
Prelude.Ana.typ ->
valueval add_offset_varinfo : Addr.Offs.t -> Addr.t -> Addr.tval sync' :
[ `Init | `Join | `Normal | `Return | `Thread ] ->
(BaseDomain.BaseComponents(Priv.D).t, Priv.G.t, 'a) Analyses.ctx ->
D.tval sync :
(BaseDomain.BaseComponents(Priv.D).t, Priv.G.t, 'a) Analyses.ctx ->
[< `Init | `Join | `Normal | `Return | `Thread ] ->
D.tval publish_all :
(BaseDomain.BaseComponents(Priv.D).t, Priv.G.t, 'a) Analyses.ctx ->
[ `Init | `Join | `Normal | `Return | `Thread ] ->
unitval get_var : Q.ask -> glob_fun -> store -> Prelude.Ana.varinfo -> valueget st addr returns the value corresponding to addr in st * adding proper dependencies. * For the exp argument it is always ok to put None. This means not using precise information about * which part of an array is involved.
val reachable_from_value :
Q.ask ->
glob_fun ->
'a ->
value ->
Prelude.Ana.typ ->
string ->
ValueDomain.AD.bucket AD.Map.tval context : Prelude.Ana.fundec -> store -> storeval context_cpa : Prelude.Ana.fundec -> store -> BaseDomain.CPA.tval convertToQueryLval :
ValueDomain.AD.Addr.t ->
(CilType.Varinfo.t
* ([> `Field of Cil.fieldinfo * 'a
| `Index of Prelude.Ana.exp * 'a
| `NoOffset ] as 'a))
listval addrToLvalSet : ValueDomain.AD.Addr.t list AD.Map.t -> Q.LS.tval reachable_top_pointers_types :
(store, G.t, 'a) Analyses.ctx ->
AD.t ->
Queries.TS.tval eval_rv_ask_evalint : Q.ask -> glob_fun -> store -> Prelude.Ana.exp -> VD.tEvaluate expression using EvalInt query. Base itself also answers EvalInt, so recursion goes indirectly through queries. This allows every subexpression to also meet more precise value from other analyses. Non-integer expression just delegate to next eval_rv function.
val eval_rv_no_ask_evalint :
Q.ask ->
glob_fun ->
store ->
Prelude.Ana.exp ->
VD.tEvaluate expression without EvalInt query on outermost expression. This is used by base responding to EvalInt to immediately directly avoid EvalInt query cycle, which would return top. Recursive eval_rv calls on subexpressions still go through eval_rv_ask_evalint.
val eval_rv_ask_mustbeequal :
Q.ask ->
glob_fun ->
store ->
Prelude.Ana.exp ->
VD.tEvaluate expression using MustBeEqual query. Otherwise just delegate to next eval_rv function.
val eval_rv_base : Q.ask -> glob_fun -> store -> Prelude.Ana.exp -> valueEvaluate expression structurally by base. This handles constants directly and variables using CPA. Subexpressions delegate to eval_rv, which may use queries on them.
val eval_fv : Q.ask -> glob_fun -> store -> Prelude.Ana.exp -> AD.tval eval_tv : Q.ask -> glob_fun -> store -> Prelude.Ana.exp -> AD.tval eval_int :
Q.ask ->
glob_fun ->
store ->
Prelude.Ana.exp ->
ValueDomain.ID.tval convert_offset :
Q.ask ->
glob_fun ->
store ->
Prelude.Ana.offset ->
Addr.Offs.tval eval_lv : Q.ask -> glob_fun -> store -> Prelude.Ana.lval -> AD.tval eval_rv_keep_bot : Q.ask -> glob_fun -> store -> Prelude.Ana.exp -> valueval eval_rv : Q.ask -> glob_fun -> store -> Prelude.Ana.exp -> valueval query_evalint :
Q.ask ->
glob_fun ->
store ->
Prelude.Ana.exp ->
ValueDomain.ID.tval eval_exp : store -> Prelude.Ana.exp -> ValueDomain.ID.int_t optionval eval_funvar :
(store, G.t, 'a) Analyses.ctx ->
Prelude.Ana.exp ->
Prelude.Ana.varinfo listval eval_rv_address : Q.ask -> glob_fun -> store -> Prelude.Ana.exp -> VD.tEvaluate expression as address. Avoids expensive Apron EvalInt if the `Int result would be useless to us anyway.
val query : (store, G.t, 'b) Analyses.ctx -> 'a Q.t -> 'a Q.resultval add_partitioning_dependencies :
Prelude.Ana.varinfo ->
VD.t ->
store ->
storeAdd dependencies between a value and the expression it (or any of its contents) are partitioned by
val set :
Q.ask ->
?ctx:(store, Priv.G.t, 'a) Analyses.ctx option ->
?invariant:bool ->
?lval_raw:Prelude.Ana.lval ->
?rval_raw:Cil.exp ->
?t_override:Cil.typ ->
glob_fun ->
store ->
AD.t ->
Cil.typ ->
value ->
storeset st addr val returns a state where addr is set to val * it is always ok to put None for lval_raw and rval_raw, this amounts to not using/maintaining * precise information about arrays.
val rem_many : 'a -> store -> Prelude.Ana.varinfo list -> storeval rem_many_paritioning :
ValueDomain.Q.ask ->
store ->
Prelude.Ana.varinfo list ->
storeval is_some_bot :
[< `Address of 'a AD.Map.t
| `Array of ValueDomain.CArrays.t
| `Blob of ValueDomain.Blobs.t
| `Bot
| `Int of ID.t
| `List of ValueDomain.Lists.t
| `Struct of ValueDomain.Structs.t
| `Thread of ValueDomain.Threads.t
| `Top
| `Union of ValueDomain.Unions.t ] ->
boolval invariant :
(store, Priv.G.t, 'a) Analyses.ctx ->
Q.ask ->
glob_fun ->
store ->
Prelude.Ana.exp ->
bool ->
storeval set_savetop :
?ctx:(store, Priv.G.t, 'a) Analyses.ctx ->
?lval_raw:Prelude.Ana.lval ->
?rval_raw:Cil.exp ->
Q.ask ->
glob_fun ->
store ->
AD.bucket AD.Map.t ->
Prelude.Ana.typ ->
VD.t ->
storeval assign :
(store, G.t, 'a) Analyses.ctx ->
Prelude.Ana.lval ->
Prelude.Ana.exp ->
storemodule Locmap = Deadcode.Locmapval dead_branches : bool -> bool Deadcode.Locmap.tval locmap_modify_def : 'a -> Locmap.key -> ('a -> 'a) -> 'a Locmap.t -> unitval branch : (store, G.t, 'a) Analyses.ctx -> Prelude.Ana.exp -> bool -> storeval body : (store, G.t, 'a) Analyses.ctx -> Prelude.Ana.fundec -> storeval return :
(store, G.t, 'a) Analyses.ctx ->
Prelude.Ana.exp option ->
Prelude.Ana.fundec ->
storeval vdecl : (store, G.t, 'a) Analyses.ctx -> Prelude.Ana.varinfo -> storeval collect_funargs :
Q.ask ->
?warn:bool ->
glob_fun ->
store ->
Prelude.Ana.exp list ->
address listFrom a list of expressions, collect a list of addresses that they might point to, or contain pointers to.
val invalidate :
?ctx:(store, Priv.G.t, 'a) Analyses.ctx ->
Q.ask ->
glob_fun ->
store ->
Prelude.Ana.exp list ->
storeval make_entry :
?thread:bool ->
(D.t, G.t, C.t) Analyses.ctx ->
Prelude.Ana.fundec ->
Prelude.Ana.exp list ->
D.tval enter :
(D.t, G.t, C.t) Analyses.ctx ->
'a ->
Prelude.Ana.fundec ->
Prelude.Ana.exp list ->
(D.t * D.t) listval forkfun :
(D.t, G.t, C.t) Analyses.ctx ->
Prelude.Ana.lval option ->
Prelude.Ana.varinfo ->
Prelude.Ana.exp list ->
(Prelude.Ana.lval option * Prelude.Ana.varinfo * Prelude.Ana.exp list) listval assert_fn :
(store, G.t, 'a) Analyses.ctx ->
Prelude.Ana.exp ->
bool ->
bool ->
storeval special_unknown_invalidate :
(store, Priv.G.t, 'a) Analyses.ctx ->
'b ->
glob_fun ->
store ->
CilType.Varinfo.t ->
Prelude.Ana.exp list ->
storeval special :
(store, G.t, C.t) Analyses.ctx ->
Prelude.Ana.lval option ->
Prelude.Ana.varinfo ->
Prelude.Ana.exp list ->
storeval combine :
(store, G.t, 'a) Analyses.ctx ->
Prelude.Ana.lval option ->
'b ->
Prelude.Ana.fundec ->
Prelude.Ana.exp list ->
'c ->
D.t ->
D.tval call_descr : Prelude.Ana.fundec -> store -> stringval threadenter :
(store, G.t, C.t) Analyses.ctx ->
Prelude.Ana.lval option ->
Prelude.Ana.varinfo ->
Prelude.Ana.exp list ->
D.t listval threadspawn :
(D.t, 'a, 'b) Analyses.ctx ->
Prelude.Ana.lval option ->
Prelude.Ana.varinfo ->
Prelude.Ana.exp list ->
('c, 'd, 'e) Analyses.ctx ->
D.tval event :
(store, G.t, 'a) Analyses.ctx ->
Events.t ->
('b, Priv.G.t, 'c) Analyses.ctx ->
BaseDomain.BaseComponents(Priv.D).t