From 03bf686f1cdf70f18ca7c98530593249af09391d Mon Sep 17 00:00:00 2001 From: Allan Blanchard <allan.blanchard@cea.fr> Date: Tue, 7 Apr 2020 17:28:47 +0200 Subject: [PATCH] [wp] MemLoader generates initialized for segments --- src/plugins/wp/MemLoader.ml | 13 +++++++++++++ src/plugins/wp/MemLoader.mli | 2 +- src/plugins/wp/MemRegion.ml | 3 +-- src/plugins/wp/MemTyped.ml | 14 +------------- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/plugins/wp/MemLoader.ml b/src/plugins/wp/MemLoader.ml index e9e806770dc..ac6e5cbcda1 100644 --- a/src/plugins/wp/MemLoader.ml +++ b/src/plugins/wp/MemLoader.ml @@ -433,6 +433,19 @@ struct let initialized_loc sigma obj loc = initialized_term obj (initvalue sigma obj loc) + let initialized sigma = function + | Rloc(obj, loc) -> initialized_loc sigma obj loc + | Rrange(loc, obj, Some low, Some up) -> + let x = Lang.freshvar ~basename:"i" Lang.t_int in + let v = e_var x in + let hyps = [ p_leq low v ; p_leq v up] in + let loc = M.shift loc obj v in + p_forall [x] (p_hyps hyps (initialized_loc sigma obj loc)) + | Rrange(_l, _, low, up) -> + Wp_parameters.abort ~current:true + "Invalid infinite range @[<hov 2>+@,(%a@,..%a)@]" + Vset.pp_bound low Vset.pp_bound up + (* -------------------------------------------------------------------------- *) (* --- Stored & Copied --- *) (* -------------------------------------------------------------------------- *) diff --git a/src/plugins/wp/MemLoader.mli b/src/plugins/wp/MemLoader.mli index 747ebaf8d7a..7240bbcc920 100644 --- a/src/plugins/wp/MemLoader.mli +++ b/src/plugins/wp/MemLoader.mli @@ -97,7 +97,7 @@ sig val assigned : M.Sigma.t sequence -> c_object -> M.loc sloc -> equation list - val initialized_loc : M.Sigma.t -> c_object -> M.loc -> pred + val initialized : M.Sigma.t -> M.loc rloc -> pred end diff --git a/src/plugins/wp/MemRegion.ml b/src/plugins/wp/MemRegion.ml index 233936e0491..ec013da03bc 100644 --- a/src/plugins/wp/MemRegion.ml +++ b/src/plugins/wp/MemRegion.ml @@ -826,7 +826,7 @@ let loadvalue = LOADER.loadvalue let stored = LOADER.stored let copied = LOADER.copied let assigned = LOADER.assigned -let initialized_loc = LOADER.initialized_loc +let initialized = LOADER.initialized let domain = LOADER.domain @@ -891,6 +891,5 @@ let frame _sigma = [] let alloc sigma _xs = sigma let scope _seq _s _xs = [] let valid _sigma _acs _l = error "Validity not yet implemented" -let initialized _sigma _l = error "Initialization not yet implemented" let invalid _sigma _l = error "Validity not yet implemented" let global _sigma _p = F.p_true diff --git a/src/plugins/wp/MemTyped.ml b/src/plugins/wp/MemTyped.ml index 7aa36305771..51d49141a7e 100644 --- a/src/plugins/wp/MemTyped.ml +++ b/src/plugins/wp/MemTyped.ml @@ -995,7 +995,7 @@ let load = LOADER.load let stored = LOADER.stored let copied = LOADER.copied let assigned = LOADER.assigned -let initialized_loc = LOADER.initialized_loc +let initialized = LOADER.initialized let domain = LOADER.domain (* -------------------------------------------------------------------------- *) @@ -1047,18 +1047,6 @@ let segment phi = function let valid sigma acs = segment (s_valid sigma acs) let invalid sigma = segment (s_invalid sigma) -let initialized sigma = function - | Rloc(obj, loc) -> initialized_loc sigma obj loc - | Rrange(loc, obj, Some low, Some up) -> - let v = e_var (Lang.freshvar ~basename:"i" Lang.t_int) in - let hyps = [ p_leq low v ; p_leq v up] in - let loc = shift loc obj v in - p_hyps hyps (initialized_loc sigma obj loc) - | Rrange(l, _, low, up) -> - Wp_parameters.abort ~current:true - "Invalid infinite range @[<hov 2>%a+@,(%a@,..%a)@]" - F.pp_term l Vset.pp_bound low Vset.pp_bound up - let frame sigma = let wellformed_frame phi chunk = if Sigma.mem sigma chunk -- GitLab