method vinst = function
      Call (lvo, f, args, _) -> begin
        (* we will compute the use and def that appear in
         * this instruction. We also add in the stuff computed by
         * getUseDefFunctionRef *)

        let use, def, args' = !getUseDefFunctionRef f args in
        varUsed := VS.union !varUsed use;
        varDefs := VS.union !varDefs def;

        (* Now visit the children of  "Call (lvo, f, args', _)" *)
        let self: cilVisitor = (self :> cilVisitor) in
        (match lvo with None -> ()
         | Some lv -> ignore (visitCilLval self lv));
        ignore (visitCilExpr self f);
        List.iter (fun arg -> ignore (visitCilExpr self arg)) args';
        SkipChildren;
      end
    | Asm(_,_,slvl,_,_,_) -> List.iter (fun (_,s,lv) ->
        match lv with (Var v, _off) ->
          if s.[0] = '+' then
            varUsed := VS.add v !varUsed;
        | _ -> ()) slvl;
        DoChildren
    | _ -> DoChildren