Module ThreadEscape.Spec

include module type of struct include Analyses.IdentitySpec end
include module type of struct include Analyses.DefaultSpec end

Relatively safe default implementations of some boring Spec functions.

module P = Analyses.UnitP
type marshal = unit
val init : 'a -> unit
val finalize : unit -> unit
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 context : 'a -> 'b -> 'c -> 'd
val paths_as_set : ('a, 'b, 'c, 'd) Analyses.ctx -> 'e list
module A = Analyses.UnitA
val access : 'a -> 'b -> unit
val branch : ('a, 'b, 'c, 'd) Analyses.ctx -> GoblintCil.exp -> bool -> 'e
val body : ('a, 'b, 'c, 'd) Analyses.ctx -> GoblintCil.fundec -> 'e
val return : ('a, 'b, 'c, 'd) Analyses.ctx -> GoblintCil.exp option -> GoblintCil.fundec -> 'e
val enter : ('a, 'b, 'c, 'd) Analyses.ctx -> GoblintCil.lval option -> GoblintCil.fundec -> GoblintCil.exp list -> ('e * 'f) list
val combine_env : 'a -> GoblintCil.lval option -> 'b -> GoblintCil.fundec -> GoblintCil.exp list -> 'c -> 'd -> Queries.ask -> 'e
module ThreadIdSet : sig ... end
val name : unit -> string
include sig ... end
module C : sig ... end
val startcontext : unit -> D.t
module G = ThreadIdSet
val reachable : Queries.ask -> GoblintCil.exp -> D.t
val mpt : Queries.ask -> GoblintCil.exp -> D.t
val thread_id : ('a, 'b, 'c, 'd) Analyses.ctx -> ThreadIdDomain.ThreadLifted.t Queries.result
val emit_escape_event : ('a, 'b, 'c, 'd) Analyses.ctx -> D.t -> unit

Emit an escape event: Only necessary when code has ever been multithreaded, or when about to go multithreaded.

val side_effect_escape : ('a, G.t, 'b, D.elt) Analyses.ctx -> D.t -> G.elt -> unit

Side effect escapes: In contrast to the emitting the event, side-effecting is necessary in single threaded mode, since we rely on escape status in Base for passing locals reachable via globals

val query : (D.t, ThreadIdSet.t, 'b, GoblintCil.varinfo) Analyses.ctx -> 'a Queries.t -> 'a0 Queries.result
val escape_rval : ('a, G.t, 'b, D.elt) Analyses.ctx -> Queries.ask -> GoblintCil.exp -> D.t
val assign : (D.t, G.t, 'a, D.elt) Analyses.ctx -> GoblintCil.lval -> GoblintCil.exp -> D.t
val combine_assign : (D.t, G.t, 'a, D.elt) Analyses.ctx -> GoblintCil.lval option -> GoblintCil.exp -> 'b -> 'c -> 'd -> 'e -> Queries.ask -> D.t
val special : (D.t, G.t, 'a, D.elt) Analyses.ctx -> GoblintCil.lval option -> GoblintCil.varinfo -> GoblintCil.exp list -> D.t
val startstate : 'a -> D.t
val exitstate : 'a -> D.t
val threadenter : 'a -> multiple:'b -> 'c -> 'd -> 'e -> D.t list
val threadspawn : (D.t, G.t, 'a, D.elt) Analyses.ctx -> multiple:'b -> 'c -> 'd -> GoblintCil.exp list -> 'e -> D.t
val event : (D.t, G.t, 'a, D.elt) Analyses.ctx -> Events.t -> 'b -> D.t