package goblint
Static analysis framework for C
Install
Dune Dependency
Authors
Maintainers
Sources
goblint-2.0.0.tbz
sha256=2f4f2e25b765452f0e336941f35f6cb396d7c213a2d347abe5d35febc5159b1f
sha512=e96af4cad91f6985c8db93c194925853e96cad0ec1a0d9f4d32bbe16d3e5fa1e305f54be02839f21ba89ad2af0c2d5d7aa819ade221ce097dc4dbd0fcd8c8500
doc/goblint.lib/Goblint_lib/AccessAnalysis/Spec/index.html
Module AccessAnalysis.Spec
Access and data race analyzer without base --- this is the new standard
include module type of struct include Analyses.DefaultSpec end
val vdecl : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e -> 'a
val asm : ('a, 'b, 'c, 'd) Analyses.ctx -> 'a
val skip : ('a, 'b, 'c, 'd) Analyses.ctx -> 'a
val event : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e -> 'f -> 'a
val sync : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e -> 'a
module A = Goblint_lib.Analyses.DefaultSpec.A
module D = Lattice.Unit
module C = Lattice.Unit
module V0 : sig ... end
module V : sig ... end
module V0Set : sig ... end
module G : sig ... end
val safe : int Prelude.Ana.ref
val vulnerable : int Prelude.Ana.ref
val unsafe : int Prelude.Ana.ref
val side_vars :
('a, [> `Lifted2 of V0Set.t ], 'b, [> `Right of CilType.Varinfo.t ])
Analyses.ctx ->
Access.LVOpt.t ->
Access.T.t ->
unit
val side_access :
('a,
[> `Lifted1 of Access.AS.t | `Lifted2 of V0Set.t ],
'b,
[> `Left of Access.LVOpt.t * Access.T.t | `Right of CilType.Varinfo.t ])
Analyses.ctx ->
Access.T.t ->
Access.LVOpt.t ->
(int * AccessKind.t * Node.t * CilType.Exp.t * MCPAccess.A.t) ->
unit
val do_access :
(D.t, G.t, C.t, V.t) Analyses.ctx ->
AccessKind.t ->
bool ->
int ->
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:
deref=false
,reach=false
- Accessexp
without dereferencing, used for all normal reads and all function call arguments.deref=true
,reach=false
- Accessexp
by dereferencing once (may-point-to), used for lval writes and shallow special accesses.deref=true
,reach=true
- Accessexp
by dereferencing transitively (reachable), used for deep special accesses.
Transfer functions:
val assign :
(D.t, G.t, C.t, V.t) Analyses.ctx ->
Prelude.Ana.lval ->
Prelude.Ana.exp ->
D.t
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 special :
(D.t, G.t, C.t, V.t) Analyses.ctx ->
Prelude.Ana.lval option ->
GoblintCil.Cil.varinfo ->
Prelude.Ana.exp list ->
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 ->
'c
val threadspawn :
(D.t, G.t, C.t, V.t) Analyses.ctx ->
Prelude.Ana.lval option ->
'a ->
'b ->
'c ->
D.t
val query :
('b, [> `Bot | `Lifted1 of Access.AS.t | `Lifted2 of V0Set.t ], 'c, V.t)
Analyses.ctx ->
'a Queries.t ->
'a Queries.result
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>