let used_var var =
  try
    UsedVarState.find var
  with Not_found ->
    let return v = UsedVarState.add var v; v in
    try
      let f = fst (Globals.entry_point ()) in
      let inputs = !Db.Inputs.get_external f
      and outputs = !Db.Outputs.get_external f in
      let b = Base.create_varinfo var in
      return (Locations.Zone.mem_base b inputs ||
              Locations.Zone.mem_base b outputs)
    with e ->
      Gui_parameters.error ~once:true
        "Exception during usability analysis of var %s: %s"
        var.vname (Printexc.to_string e);
      return true