From 30779d958b62a9bab455549bdcfcc8e01dedc934 Mon Sep 17 00:00:00 2001 From: Allan Blanchard <allan.blanchard@cea.fr> Date: Mon, 1 Feb 2021 14:44:57 +0100 Subject: [PATCH] [wp] Fixes formals scope --- src/plugins/wp/cfgCalculus.ml | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/plugins/wp/cfgCalculus.ml b/src/plugins/wp/cfgCalculus.ml index 0b9f43b08d6..d2e8be2e49f 100644 --- a/src/plugins/wp/cfgCalculus.ml +++ b/src/plugins/wp/cfgCalculus.ml @@ -347,13 +347,6 @@ struct if not (is_default_bhv mode) then [] else CfgAnnot.get_disjoint_behaviors kf - let body env ~ensures ~exits w = - let rw = List.fold_right (prove_property env) ensures w in - let rk = List.fold_right (prove_property env) exits env.wk in - Vhash.add env.wp env.cfg.return_point (Some rw) ; - env.wk <- rk ; - wp env env.cfg.entry_point - (* Putting everything together *) let compute ~mode ~props = let kf = mode.kf in @@ -386,16 +379,22 @@ struct (* frame-in *) W.scope env.we xs SC_Frame_in @@ (* function body *) - body env - ~ensures:bhv.bhv_ensures - ~exits:bhv.bhv_exits @@ + begin fun w -> + Vhash.add env.wp env.cfg.return_point (Some w) ; + wp env env.cfg.entry_point + end @@ (* frame-out *) - W.label env.we None Clabels.post @@ - (fun t -> - if not has_exit then env.wk <- t - else env.wk <- prove_assigns env bhv.bhv_exit_assigns t ; - prove_assigns env bhv.bhv_post_assigns t) @@ W.scope env.we xs SC_Frame_out @@ + (* Post-conds*) + W.label env.we None Clabels.post @@ + begin fun w -> + env.wk <- + List.fold_right (prove_property env) bhv.bhv_exits @@ + if not has_exit then w else prove_assigns env bhv.bhv_exit_assigns w ; + + List.fold_right (prove_property env) bhv.bhv_ensures @@ + prove_assigns env bhv.bhv_post_assigns w + end @@ (* wp-end *) W.empty -- GitLab