functor
  (Loc : Abstract_location.Internal) (Convert : sig
                                                  type extended_value
                                                  val extend_val :
                                                    Loc.value ->
                                                    extended_value
                                                  val replace_val :
                                                    Loc.value ->
                                                    extended_value ->
                                                    extended_value
                                                  val restrict_val :
                                                    extended_value ->
                                                    Loc.value
                                                end->
  sig
    type value = Convert.extended_value
    type location = Loc.location
    type offset = Loc.offset
    val top : location
    val equal_loc : location -> location -> bool
    val equal_offset : offset -> offset -> bool
    val pretty_loc : Format.formatter -> location -> unit
    val pretty_offset : Format.formatter -> offset -> unit
    val to_value : location -> value
    val size : location -> Int_Base.t
    val partially_overlap : location -> location -> bool
    val check_non_overlapping :
      (Cil_types.lval * location) list ->
      (Cil_types.lval * location) list -> unit Eval.evaluated
    val no_offset : offset
    val forward_field :
      Cil_types.typ -> Cil_types.fieldinfo -> offset -> offset
    val forward_index : Cil_types.typ -> value -> offset -> offset
    val reduce_index_by_array_size :
      size_expr:Cil_types.exp ->
      index_expr:Cil_types.exp -> Integer.t -> value -> value Eval.evaluated
    val forward_variable :
      Cil_types.typ -> Cil_types.varinfo -> offset -> location Eval.or_bottom
    val forward_pointer :
      Cil_types.typ -> value -> offset -> location Eval.or_bottom
    val eval_varinfo : Cil_types.varinfo -> location
    val reduce_loc_by_validity :
      for_writing:bool ->
      bitfield:bool -> Cil_types.lval -> location -> location Eval.evaluated
    val backward_variable :
      Cil_types.varinfo -> location -> offset Eval.or_bottom
    val backward_pointer :
      value -> offset -> location -> (value * offset) Eval.or_bottom
    val backward_field :
      Cil_types.typ -> Cil_types.fieldinfo -> offset -> offset Eval.or_bottom
    val backward_index :
      Cil_types.typ ->
      index:value ->
      remaining:offset -> offset -> (value * offset) Eval.or_bottom
    val structure : location Abstract_location.structure
  end