From 16a2ab4d100ce31f54b3f3e21c614e702e65bacb Mon Sep 17 00:00:00 2001 From: Allan Blanchard <allan.blanchard@cea.fr> Date: Wed, 18 Sep 2024 10:45:48 +0200 Subject: [PATCH] [wp] MemLoader: require obj for init --- src/plugins/wp/MemLoader.ml | 22 ++++++++++------------ src/plugins/wp/MemLoader.mli | 6 ++---- src/plugins/wp/MemTyped.ml | 7 ++----- 3 files changed, 14 insertions(+), 21 deletions(-) diff --git a/src/plugins/wp/MemLoader.ml b/src/plugins/wp/MemLoader.ml index 27e8c434e5c..bf2d6b187cd 100644 --- a/src/plugins/wp/MemLoader.ml +++ b/src/plugins/wp/MemLoader.ml @@ -66,8 +66,6 @@ sig val havoc : c_object -> loc -> length:term -> Chunk.t -> fresh:term -> current:term -> term - val eqmem : c_object -> loc -> Chunk.t -> term -> term -> pred - val eqmem_forall : c_object -> loc -> Chunk.t -> term -> term -> var list * pred * pred @@ -79,9 +77,9 @@ sig val store_float : Sigma.t -> c_float -> loc -> term -> Chunk.t * term val store_pointer : Sigma.t -> typ -> loc -> term -> Chunk.t * term - val is_init_atom : Sigma.t -> loc -> term + val is_init_atom : Sigma.t -> c_object -> loc -> term val is_init_range : Sigma.t -> c_object -> loc -> term -> pred - val set_init_atom : Sigma.t -> loc -> term -> Chunk.t * term + val set_init_atom : Sigma.t -> c_object -> loc -> term -> Chunk.t * term val set_init : c_object -> loc -> length:term -> Chunk.t -> current:term -> term (* val monotonic_init : Sigma.t -> Sigma.t -> pred *) @@ -549,7 +547,7 @@ struct let initialized_loc sigma obj loc = match obj with - | C_int _ | C_float _ | C_pointer _ -> p_bool (M.is_init_atom sigma loc) + | C_int _ | C_float _ | C_pointer _ -> p_bool (M.is_init_atom sigma obj loc) | C_comp ci -> initialized_comp sigma ci loc | C_array a -> initialized_array sigma a loc @@ -571,9 +569,9 @@ struct module INIT_LOADER = LOADER_GEN (struct - let load_int sigma _ = M.is_init_atom sigma - let load_float sigma _ = M.is_init_atom sigma - let load_pointer sigma _ = M.is_init_atom sigma + let load_int sigma ikind = M.is_init_atom sigma (C_int ikind) + let load_float sigma fkind = M.is_init_atom sigma (C_float fkind) + let load_pointer sigma typ = M.is_init_atom sigma (C_pointer typ) end)(COMP_INIT)(ARRAY_INIT) let load_init = INIT_LOADER.load @@ -618,8 +616,8 @@ struct (* --- Stored & Copied --- *) (* -------------------------------------------------------------------------- *) - let updated_init_atom seq loc value = - let chunk_init,mem_init = M.set_init_atom seq.pre loc value in + let updated_init_atom seq obj loc value = + let chunk_init,mem_init = M.set_init_atom seq.pre obj loc value in Set(Sigma.value seq.post chunk_init,mem_init) let updated_atom seq obj loc value = @@ -642,7 +640,7 @@ struct let stored_init seq obj loc value = match obj with | C_int _ | C_float _ | C_pointer _ -> - [ updated_init_atom seq loc value ] + [ updated_init_atom seq obj loc value ] | C_comp _ | C_array _ -> Set(load_init seq.post obj loc, value) :: havoc_init seq obj loc @@ -659,7 +657,7 @@ struct | C_int _ | C_float _ | C_pointer _ -> let value = Lang.freshvar ~basename:"v" (Lang.tau_of_object obj) in let init = Lang.freshvar ~basename:"i" (Lang.init_of_object obj) in - [ updated_init_atom seq loc (e_var init) ; + [ updated_init_atom seq obj loc (e_var init) ; updated_atom seq obj loc (e_var value) ] | C_comp _ | C_array _ -> havoc seq obj loc @ havoc_init seq obj loc diff --git a/src/plugins/wp/MemLoader.mli b/src/plugins/wp/MemLoader.mli index c460d3cae0b..46d62359db3 100644 --- a/src/plugins/wp/MemLoader.mli +++ b/src/plugins/wp/MemLoader.mli @@ -62,8 +62,6 @@ sig val havoc : c_object -> loc -> length:term -> Chunk.t -> fresh:term -> current:term -> term - val eqmem : c_object -> loc -> Chunk.t -> term -> term -> pred - val eqmem_forall : c_object -> loc -> Chunk.t -> term -> term -> var list * pred * pred @@ -75,9 +73,9 @@ sig val store_float : Sigma.t -> c_float -> loc -> term -> Chunk.t * term val store_pointer : Sigma.t -> typ -> loc -> term -> Chunk.t * term - val is_init_atom : Sigma.t -> loc -> term + val is_init_atom : Sigma.t -> c_object -> loc -> term val is_init_range : Sigma.t -> c_object -> loc -> term -> pred - val set_init_atom : Sigma.t -> loc -> term -> Chunk.t * term + val set_init_atom : Sigma.t -> c_object -> loc -> term -> Chunk.t * term val set_init : c_object -> loc -> length:term -> Chunk.t -> current:term -> term (* val monotonic_init : Sigma.t -> Sigma.t -> pred *) diff --git a/src/plugins/wp/MemTyped.ml b/src/plugins/wp/MemTyped.ml index dbfafb02cb6..473a678b004 100644 --- a/src/plugins/wp/MemTyped.ml +++ b/src/plugins/wp/MemTyped.ml @@ -1048,9 +1048,6 @@ struct F.e_fun f_havoc [fresh;current;loc;n] else fresh - let eqmem obj loc _chunk m1 m2 = - F.p_call p_eqmem [m1;m2;loc;length_of_object obj] - let eqmem_forall obj loc _chunk m1 m2 = let xp = Lang.freshvar ~basename:"p" MemAddr.t_addr in let p = F.e_var xp in @@ -1065,8 +1062,8 @@ struct let store_float sigma f l v = updated sigma (m_float f) l v let store_pointer sigma _ty l v = updated sigma M_pointer l v - let set_init_atom sigma l v = updated sigma T_init l v - let is_init_atom sigma l = F.e_get (Sigma.value sigma T_init) l + let set_init_atom sigma _obj l v = updated sigma T_init l v + let is_init_atom sigma _ l = F.e_get (Sigma.value sigma T_init) l let is_init_range sigma obj loc length = let n = F.e_mul (length_of_object obj) length in -- GitLab