let term_visible (fm,kf) t =
    let module M = struct exception Invisible end in
    let visitor =
      object 
        inherit Visitor.frama_c_inplace
        method vlogic_var_use v =
          match v.lv_origin with
              None -> DoChildren
            | Some v when v.vformal ->
              (try
                 if not 
                   (key_visible "logic_var_visible" fm
                      (PdgIndex.Key.param_key
                         (Kernel_function.get_formal_position v kf + 1)
                         v))
                 then raise M.Invisible
                 else DoChildren
               with Not_found ->
                 Sparecode_params.fatal 
                   "%a is a formal parameter but not of the current kernel function %a. Aborting because of inconsistent state."
                   !Ast_printer.d_var v !Ast_printer.d_var 
                   (Kernel_function.get_vi kf)
              )
            | Some v when not v.vglob ->
              if 
                not
                  (key_visible "logic_var_visible" fm
                     (PdgIndex.Key.decl_var_key v))
              then raise M.Invisible
              else DoChildren
            | Some _ -> DoChildren
      end
    in
    try
      ignore (Visitor.visitFramacTerm visitor t); true
    with M.Invisible -> false