You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.1 KiB
73 lines
2.1 KiB
(*
|
|
* Copyright (c) 2018-present, Facebook, Inc.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*)
|
|
|
|
open! IStd
|
|
|
|
type t = PulseDomain.t = {heap: PulseDomain.Memory.t; stack: PulseDomain.Stack.t}
|
|
|
|
type 'a access_result = ('a, PulseDiagnostic.t) result
|
|
|
|
module Closures : sig
|
|
val check_captured_addresses :
|
|
Location.t
|
|
-> HilExp.AccessExpression.t
|
|
-> PulseDomain.AbstractAddress.t
|
|
-> t
|
|
-> t access_result
|
|
(** assert the validity of the addresses captured by the lambda *)
|
|
|
|
val record :
|
|
Location.t
|
|
-> HilExp.AccessExpression.t
|
|
-> Typ.Procname.t
|
|
-> (AccessPath.base * HilExp.t) list
|
|
-> t
|
|
-> t access_result
|
|
(** record that the access expression points to a lambda with its captured addresses *)
|
|
end
|
|
|
|
module StdVector : sig
|
|
val is_reserved : Location.t -> HilExp.AccessExpression.t -> t -> (t * bool) access_result
|
|
|
|
val mark_reserved : Location.t -> HilExp.AccessExpression.t -> t -> t access_result
|
|
end
|
|
|
|
val read :
|
|
Location.t
|
|
-> HilExp.AccessExpression.t
|
|
-> t
|
|
-> (t * (PulseDomain.AbstractAddress.t * PulseTrace.t)) access_result
|
|
|
|
val read_all : Location.t -> HilExp.AccessExpression.t list -> t -> t access_result
|
|
|
|
val havoc_var : PulseTrace.t -> Var.t -> t -> t
|
|
|
|
val havoc : PulseTrace.t -> Location.t -> HilExp.AccessExpression.t -> t -> t access_result
|
|
|
|
val write_var : Var.t -> PulseDomain.AbstractAddress.t * PulseTrace.t -> t -> t
|
|
|
|
val write :
|
|
Location.t
|
|
-> HilExp.AccessExpression.t
|
|
-> PulseDomain.AbstractAddress.t * PulseTrace.t
|
|
-> t
|
|
-> t access_result
|
|
|
|
val invalidate :
|
|
PulseInvalidation.t -> Location.t -> HilExp.AccessExpression.t -> t -> t access_result
|
|
|
|
val invalidate_array_elements :
|
|
PulseInvalidation.t -> Location.t -> HilExp.AccessExpression.t -> t -> t access_result
|
|
|
|
val record_var_decl_location : Location.t -> Var.t -> t -> t
|
|
|
|
val remove_vars : Var.t list -> t -> t
|
|
|
|
(* TODO: better name and pass location to report where we returned *)
|
|
val check_address_of_local_variable :
|
|
Procdesc.t -> PulseDomain.AbstractAddress.t -> t -> t access_result
|