let computeUseDefStmtKind ?(acc_used=VS.empty)
                          ?(acc_defs=VS.empty)
                          (sk: stmtkind) : VS.t * VS.t =
  varUsed := acc_used;
  varDefs := acc_defs;
  let ve e = ignore (visitCilExpr useDefVisitor e) in
  let _ =
    match sk with
      Return (None, _) -> ()
    | Return (Some e, _) -> ve e
    | If (e, _, _, _) -> ve e
    | Break _ | Goto _ | Continue _ -> ()
    | Loop (_,_, _, _, _) -> ()
    | Switch (e, _, _, _) -> ve e
    | Instr il ->
        ignore (visitCilInstr useDefVisitor il)
    | TryExcept _ | TryFinally _ -> ()
    | Block _ | UnspecifiedSequence _ -> ()
  in
  !varUsed, !varDefs