sig
  type value
  type location
  type 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 assume_no_overlap :
    partial:bool -> location -> location -> (location * location) truth
  val assume_valid_location :
    for_writing:bool -> bitfield:bool -> location -> location truth
  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 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 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