let occurrence_highlighter buffer loc ~start ~stop =
  if Enabled.get () then
    match !Db.Occurrence.get_last_result () with
    | None -> (* occurrence not computed *)
        ()
    | Some (result, vi) ->
        let highlight () =
          let tag = make_tag buffer "occurrence" [`BACKGROUND "yellow" ] in
          apply_tag buffer tag start stop
        in
        match loc with
        | PLval (_, ki, lval) ->
            let same_lval (k, l) = Kinstr.equal k ki && Lval.equal l lval in
            if List.exists same_lval result then highlight ()
        | PTermLval (_,ki,term_lval) ->
            let same_tlval (k, l) =
              Logic_utils.is_same_tlval
                (Logic_utils.lval_to_term_lval ~cast:true l)
                term_lval
              && Kinstr.equal k ki
            in
            if List.exists same_tlval result then highlight ()
        | PVDecl(_, vi') when Varinfo.equal vi vi' ->
            highlight ()
        | PVDecl _ | PStmt _ | PGlobal _ | PIP _ -> ()