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) =
              KinstrComparable.equal k ki && Cilutil.equals 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 l)
                term_lval
              && KinstrComparable.equal k ki
            in
            if List.exists same_tlval result then highlight ()
        | PVDecl(_, vi') when VarinfoComparable.equal vi vi' ->
            highlight ()
        | PVDecl _ | PStmt _ | PCodeAnnot _ | PGlobal _ ->
            ()