Reviewed By: dkgi Differential Revision: D2996626 fb-gh-sync-id: 997531b shipit-source-id: 997531bmaster
parent
d499d5fc8e
commit
177574c29e
@ -0,0 +1,58 @@
|
|||||||
|
(*
|
||||||
|
* 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.
|
||||||
|
*)
|
||||||
|
|
||||||
|
module F = Format
|
||||||
|
|
||||||
|
module type AbstractDomain = sig
|
||||||
|
type astate
|
||||||
|
|
||||||
|
val init : astate (* the initial state *)
|
||||||
|
val bot : astate
|
||||||
|
val is_bot : astate -> bool
|
||||||
|
val lteq : astate -> astate -> bool (* fst \sqsubseteq snd? *)
|
||||||
|
val join : astate -> astate -> astate
|
||||||
|
val widen : astate -> astate -> astate
|
||||||
|
val pp : F.formatter -> astate -> unit
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
module BotLiftedAbstractDomain (A : AbstractDomain) = struct
|
||||||
|
type astate =
|
||||||
|
| Bot
|
||||||
|
| NonBot of A.astate
|
||||||
|
|
||||||
|
let bot = Bot
|
||||||
|
|
||||||
|
let is_bot astate =
|
||||||
|
astate = Bot
|
||||||
|
|
||||||
|
let init = NonBot A.init
|
||||||
|
|
||||||
|
let lteq astate1 astate2 = match astate1, astate2 with
|
||||||
|
| Bot, _ -> true
|
||||||
|
| _ , Bot -> false
|
||||||
|
| NonBot a1, NonBot a2 -> A.lteq a1 a2
|
||||||
|
|
||||||
|
let join astate1 astate2 =
|
||||||
|
match astate1, astate2 with
|
||||||
|
| Bot, _ -> astate2
|
||||||
|
| _, Bot -> astate1
|
||||||
|
| NonBot a1, NonBot a2 -> NonBot (A.join a1 a2)
|
||||||
|
|
||||||
|
let widen astate1 astate2 =
|
||||||
|
match astate1, astate2 with
|
||||||
|
| Bot, _ -> astate2
|
||||||
|
| _, Bot -> astate1
|
||||||
|
| NonBot a1, NonBot a2 -> NonBot (A.widen a1 a2)
|
||||||
|
|
||||||
|
let pp fmt = function
|
||||||
|
| Bot -> F.fprintf fmt "_|_"
|
||||||
|
| NonBot astate -> A.pp fmt astate
|
||||||
|
|
||||||
|
end
|
@ -0,0 +1,17 @@
|
|||||||
|
(*
|
||||||
|
* 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.
|
||||||
|
*)
|
||||||
|
|
||||||
|
|
||||||
|
module type TransferFunctions = sig
|
||||||
|
type astate
|
||||||
|
|
||||||
|
(* {A} instr {A'} *)
|
||||||
|
val exec_instr : astate -> Sil.instr -> astate
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in new issue