method vinst i =
let current_stmt = Cilutil.out_some self#current_stmt in
if Value.is_reachable (Value.get_stmt_state current_stmt)
then begin
match i with
| Call (_lv_opt,exp,_args,_) ->
let current_stmt = Cilutil.out_some self#current_stmt in
let deps_callees, _callees =
!Value.expr_to_kernel_function
~with_alarms:CilE.warn_none_mode
~deps:(Some Zone.bottom)
(Kstmt current_stmt) exp
in
let states_with_formals =
try Stmt.Hashtbl.find callwise_states_with_formals current_stmt
with Not_found -> assert false
in
let all_f =
List.fold_left
(fun acc (kf, state_with_formals) ->
if not (!Db.Value.use_spec_instead_of_definition kf)
then
let deps =
try
Functionwise_Pathdeps.find kf
with Not_found ->
Format.printf "pathdeps dependencies not found for %a@."
Kernel_function.pretty kf;
assert false
in
let deps_f = Lmap_bitwise.From_Model.find
state_with_formals
deps
in
Zone.join acc deps_f
else begin
Format.printf "Assuming library function %a has no path dependencies@."
Kernel_function.pretty kf;
acc
end)
deps_callees
states_with_formals
in
self#join all_f;
SkipChildren
| _ -> SkipChildren
end
else SkipChildren