method vinst i =
    if Value.is_reachable (Value.get_state self#current_kinstr) then begin
      match i with
      | Set (lv,exp,_) ->
          self#do_assign lv;
          ignore (visitFramacExpr (self:>frama_c_visitor) exp);
          Cil.SkipChildren

      | Call (lv_opt,exp,args,_) ->
          (match lv_opt with None -> ()
           | Some lv -> self#do_assign lv);
          let deps_callees, callees =
            !Value.expr_to_kernel_function
              ~with_alarms:CilE.warn_none_mode
              ~deps:(Some Zone.bottom)
              self#current_kinstr exp
          in
          self#join deps_callees;
          Kernel_function.Hptset.iter
            (fun kf -> self#join (self#compute_kf kf)) callees;
          List.iter
            (fun exp -> ignore (visitFramacExpr (self:>frama_c_visitor) exp))
            args;
          Cil.SkipChildren
      | _ -> Cil.DoChildren
    end
    else Cil.SkipChildren