|
|
|
(*
|
|
|
|
* Copyright (c) 2016 - present Facebook, Inc.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the BSD style license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
*)
|
|
|
|
|
|
|
|
open! Utils
|
|
|
|
|
|
|
|
(** Transfer functions that push abstract states across instructions. A typical client should
|
|
|
|
implement the Make signature to allow the transfer functions to be used with any kind of CFG. *)
|
|
|
|
|
|
|
|
module type S = sig
|
|
|
|
module CFG : ProcCfg.S
|
|
|
|
module Domain : AbstractDomain.S (* abstract domain whose state we propagate *)
|
|
|
|
type extras (* read-only extra state (results of previous analyses, globals, etc.) *)
|
|
|
|
|
|
|
|
(* {A} instr {A'}. [node] is the node of the current instruction *)
|
|
|
|
val exec_instr : Domain.astate -> extras ProcData.t -> CFG.node -> Sil.instr -> Domain.astate
|
|
|
|
end
|
|
|
|
|
|
|
|
module type Make = functor (C : ProcCfg.S) -> sig
|
|
|
|
include (S with module CFG = C)
|
|
|
|
end
|