RaceAnalysis.Spec
Data race analyzer without base --- this is the new standard
include module type of struct include UnitAnalysis.Spec end
include module type of struct include Analyses.DefaultSpec end
Relatively safe default implementations of some boring Spec functions.
module P = Analyses.UnitP
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 sync : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e -> 'f
val paths_as_set : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e list
module A = Analyses.UnitA
module D = Lattice.Unit
module C = Printable.Unit
val assign :
(D.t, 'a, 'b, 'c) Analyses.ctx ->
GoblintCil.lval ->
GoblintCil.exp ->
D.t
val branch : (D.t, 'a, 'b, 'c) Analyses.ctx -> GoblintCil.exp -> bool -> D.t
val body : (D.t, 'a, 'b, 'c) Analyses.ctx -> GoblintCil.fundec -> D.t
val return :
(D.t, 'a, 'b, 'c) Analyses.ctx ->
GoblintCil.exp option ->
GoblintCil.fundec ->
D.t
val enter :
(D.t, 'a, 'b, 'c) Analyses.ctx ->
GoblintCil.lval option ->
GoblintCil.fundec ->
GoblintCil.exp list ->
(D.t * D.t) list
val combine_assign :
(D.t, 'a, 'b, 'c) Analyses.ctx ->
GoblintCil.lval option ->
'd ->
GoblintCil.fundec ->
GoblintCil.exp list ->
'e ->
D.t ->
Queries.ask ->
D.t
val threadspawn :
('a, 'b, 'c, 'd) Analyses.ctx ->
multiple:'e ->
'f ->
'g ->
'h ->
'i ->
'j
module V : sig ... end
module MemoSet : sig ... end
module OneOffset : sig ... end
module OffsetTrie : sig ... end
module G : sig ... end
val side_vars :
('a, [> `Lifted2 of MemoSet.t ], 'b, [> `Right of CilType.Varinfo.t ])
Analyses.ctx ->
MemoSet.elt ->
unit
val side_access :
('a,
[> `Lifted1 of OffsetTrie.t | `Lifted2 of MemoSet.t ],
'b,
[> `Left of [ `Var of CilType.Varinfo.t | `Type of CilType.Typsig.t ]
| `Right of CilType.Varinfo.t ])
Analyses.ctx ->
Access.AS.elt ->
([ `Var of CilType.Varinfo.t | `Type of CilType.Typsig.t ] * Offset.Unit.t) ->
unit
val side_access_empty :
('a,
[> `Lifted1 of OffsetTrie.t | `Lifted2 of MemoSet.t ],
'b,
[> `Left of [ `Var of CilType.Varinfo.t | `Type of CilType.Typsig.t ]
| `Right of CilType.Varinfo.t ])
Analyses.ctx ->
([ `Var of CilType.Varinfo.t | `Type of CilType.Typsig.t ] * Offset.Unit.t) ->
unit
Side-effect empty access set for prefix-type_suffix race checking.
val type_suffix_memo : Access.Memo.t -> Access.Memo.t option
Get immediate type_suffix memo.
val find_type_suffix' :
('a,
[> `Bot | `Lifted1 of OffsetTrie.t ],
'b,
[> `Left of [ `Var of CilType.Varinfo.t | `Type of CilType.Typsig.t ] ])
Analyses.ctx ->
Access.Memo.t ->
Access.AS.t
val find_type_suffix :
('a,
[> `Bot | `Lifted1 of OffsetTrie.t ],
'b,
[> `Left of [ `Var of CilType.Varinfo.t | `Type of CilType.Typsig.t ] ])
Analyses.ctx ->
Access.Memo.t ->
Access.AS.t
Find accesses from all type_suffixes transitively.
val query :
('b, [> `Bot | `Lifted1 of OffsetTrie.t | `Lifted2 of MemoSet.t ], 'c, V.t)
Analyses.ctx ->
'a Queries.t ->
'a0 Queries.result
val event :
('a, 'b, 'c, 'd) Analyses.ctx ->
Events.t ->
('e,
[> `Lifted1 of OffsetTrie.t | `Lifted2 of MemoSet.t ],
'f,
[> `Left of [ `Var of CilType.Varinfo.t | `Type of CilType.Typsig.t ]
| `Right of CilType.Varinfo.t ])
Analyses.ctx ->
'g
val special :
(D.t,
[> `Lifted1 of OffsetTrie.t | `Lifted2 of MemoSet.t ],
'a,
[> `Left of [ `Var of CilType.Varinfo.t | `Type of CilType.Typsig.t ]
| `Right of CilType.Varinfo.t ])
Analyses.ctx ->
GoblintCil.lval option ->
GoblintCil.varinfo ->
GoblintCil.exp list ->
D.t