|
|
|
@ -28,6 +28,7 @@ let init globals =
|
|
|
|
|
|
|
|
|
|
let join l r = Some (Sh.or_ l r)
|
|
|
|
|
let is_false = Sh.is_false
|
|
|
|
|
let dnf = Sh.dnf
|
|
|
|
|
let exec_assume q b = Exec.assume q (Exp.term b)
|
|
|
|
|
let exec_kill q r = Exec.kill q (Reg.var r)
|
|
|
|
|
|
|
|
|
@ -69,8 +70,6 @@ let exec_intrinsic ~skip_throw q r i es =
|
|
|
|
|
Exec.intrinsic ~skip_throw q (Option.map ~f:Reg.var r) (Reg.var i)
|
|
|
|
|
(List.map ~f:Exp.term es)
|
|
|
|
|
|
|
|
|
|
let dnf = Sh.dnf
|
|
|
|
|
|
|
|
|
|
let term_eq_class_has_only_vars_in fvs cong term =
|
|
|
|
|
[%Trace.call fun {pf} ->
|
|
|
|
|
pf "@[<v> fvs: @[%a@] @,cong: @[%a@] @,term: @[%a@]@]" Var.Set.pp fvs
|
|
|
|
@ -163,8 +162,6 @@ let call ~summaries ~globals ~actuals ~areturn ~formals ~freturn ~locals q =
|
|
|
|
|
pf "@[<v>subst: %a@ frame: %a@ q': %a@]" Var.Subst.pp subst pp frame pp
|
|
|
|
|
q']
|
|
|
|
|
|
|
|
|
|
let recursion_beyond_bound = `prune
|
|
|
|
|
|
|
|
|
|
(** Leave scope of locals: existentially quantify locals. *)
|
|
|
|
|
let post locals _ q =
|
|
|
|
|
[%Trace.call fun {pf} ->
|
|
|
|
@ -204,6 +201,8 @@ let resolve_callee lookup ptr q =
|
|
|
|
|
| Some callee -> (lookup (Reg.name callee), q)
|
|
|
|
|
| None -> ([], q)
|
|
|
|
|
|
|
|
|
|
let recursion_beyond_bound = `prune
|
|
|
|
|
|
|
|
|
|
type summary = {xs: Var.Set.t; foot: t; post: t}
|
|
|
|
|
|
|
|
|
|
let pp_summary fs {xs; foot; post} =
|
|
|
|
|