method vfunc f =
    cur_func <- f;
    (* the set of used variables *)
    let used = List.fold_left (fun u s ->
      let u', _ = UD.computeDeepUseDefStmtKind s.skind in
      UD.VS.union u u') UD.VS.empty f.sbody.bstmts in
    let used = UD.computeUseLocalTypes ~acc_used:used f in

    (* the set of unused locals *)
    let unused = List.fold_left (fun un vi ->
      if UD.VS.mem vi used
      then un
      else (if !debug then (Kernel.debug "unusedRemoverClass: %s is unused" vi.vname);
            UD.VS.add vi un)) UD.VS.empty f.slocals in
    unused_set <- unused;
    let good_locals = List.filter self#good_var f.slocals in
    f.slocals <- good_locals;
    DoChildren