method vinst i =
    if Value.is_reachable (Value.get_state current_stmt) then begin
      match i with
      | Set (lv,exp,_) ->
          self#do_assign lv;
          ignore (visitCilExpr (self:>cilVisitor) exp);
          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)
              current_stmt exp
          in
          self#join deps_callees;
          List.iter
            (fun kf -> self#join (!Db.Inputs.get_external kf))
            callees;
          List.iter
            (fun exp -> ignore (visitCilExpr (self:>cilVisitor) exp))
            args;
          SkipChildren
      | _ -> DoChildren
    end
    else SkipChildren