method private reached_vi vi =
    if Metrics_base.consider_function vi && Varinfo.Set.mem vi unseen then
      match self#current_kf with
      | None ->
          (match current_initializer with
             | None -> assert false
             | Some vinit ->
                 Format.fprintf fmt
                   "@[<h>Initializer of %s references %s (at %a)@]@ "
                   vinit.vname vi.vname Location.pretty vi.vdecl
          )      
      | Some f ->
        if Varinfo.Set.mem (Kernel_function.get_vi f) semantic then
          let mess = 
            match self#current_stmt with
              | Some {skind = Instr (Call (_, {enode = Lval (Var v, _)}, _, _))}
                  when Varinfo.equal v vi -> "calls"
              | _ -> "references"
          in
          Format.fprintf fmt
            "@[<h>Function %a %s %s (at %a)@]@ "
            Kernel_function.pretty f mess vi.vname
            Location.pretty (Cil.CurrentLoc.get ())