let compute kf =
let infos = Stmt.Hashtbl.create 50 in
let return =
try Kernel_function.find_return kf
with Kernel_function.No_Statement ->
Pdg_parameters.fatal "No return statement for a function with body %a"
Kernel_function.pretty kf
in
let _ = add_postdom infos return (State.ToReturn (Stmt.Hptset.empty)) in
let stmts =
if !Db.Value.use_spec_instead_of_definition kf then
invalid_arg "[traces] cannot compute for a leaf function"
else
let f = Kernel_function.get_definition kf in f.sallstmts
in
let remove_top s =
try ignore (Stmt.Hashtbl.find infos s) with Not_found ->
Pdg_parameters.debug ~dkey "compute infinite path to sid:%d" s.sid;
add_postdom infos s (State.ToInfinity (Stmt.Hptset.empty))
in
let _ = List.iter remove_top stmts in
infos