method vinst i =
if Value.is_reachable
(Value.get_state (Kstmt (Cilutil.out_some self#current_stmt)))
then begin
match i with
| Call (_lv_opt,exp,_args,_) ->
let current_stmt = Kstmt (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)
current_stmt exp
in
let states_with_formals =
try Kinstr.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 Kernel_function.is_definition kf
then
let deps =
try
Functionwise_Pathdeps.find kf
with Not_found ->
Format.printf "pathdeps dependencies not found for %a@."
Kernel_function.pretty_name 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_name kf;
acc
end)
deps_callees
states_with_formals
in
self#join all_f;
SkipChildren
| _ -> SkipChildren
end
else SkipChildren