method vinst i =
    if Value.is_reachable (Value.noassert_get_state self#current_kinstr) then
      (* noassert needed for Eval.memoize. Not really satisfactory *)
    begin
      match i with
      | Set (lv,_,_) -> self#do_assign lv
      | Call (lv_opt,exp,_,_) ->
          (match lv_opt with None -> ()
             | Some lv -> self#do_assign lv);
          let _, callees =
            !Value.expr_to_kernel_function
              ~with_alarms:CilE.warn_none_mode
              ~deps:None
              self#current_kinstr
              exp
          in
          Kernel_function.Hptset.iter
            (fun kf -> self#join (self#compute_kf kf)) callees
      | _ -> ()
    end;
    Cil.SkipChildren