Skip to content
Snippets Groups Projects
Commit 133a630a authored by Allan Blanchard's avatar Allan Blanchard
Browse files

[wp] Do not look for closed terms in model lookup

parent 60782321
No related branches found
No related tags found
No related merge requests found
......@@ -453,7 +453,11 @@ struct
| Iinit _ -> Sigs.Mlval (ilval c, KInit)
let lookup s e =
try imval (Tmap.find e s.svar)
try
(* If the term is closed, any variable simplified to [e] can match. Thus,
we could return a variable that equals to [e] but is not really [e]. *)
if Lang.F.is_closed e then Sigs.Mterm
else imval (Tmap.find e s.svar)
with Not_found -> M.lookup s.smem e
let apply f s =
......
/* run.config
OPT: -wp-prop C
*/
/* run.config_qualif
DONTRUN:
*/
void foo(int y){
int x ;
// This assertion SHALL BE VISIBLE in the VC generated for C
//@ assert 0 <= y <= 4 ==> \false ;
x = 1 ;
//@ check C: x == y ;
}
# frama-c -wp [...]
[kernel] Parsing tests/wp_hoare/model_lookup.i (no preprocessing)
[wp] Running WP plugin...
[wp] Warning: Missing RTE guards
------------------------------------------------------------
Function foo
------------------------------------------------------------
Goal Check 'C' (file tests/wp_hoare/model_lookup.i, line 13):
Assume {
Type: is_sint32(y).
(* Assertion *)
Have: ((0 <= y) -> ((y <= 4) -> false)).
}
Prove: y = 1.
------------------------------------------------------------
......@@ -17,10 +17,10 @@ Assume {
Stmt { L1: }
Stmt { x.a = `v; }
(* Call 'get_int' *)
Have: ((x@L1.F1_V_a) = `v) \/ (« y->a »@L1 = `v).
Have: ((x@L1.F1_V_a) = `v) \/ (« null->a »@L1 = `v).
Stmt { x.b = `v_1; }
(* Call 'get_uint' *)
Have: ((x@L1.F1_V_b) = `v_1) \/ (« y->b »@L1 = `v_1).
Have: ((x@L1.F1_V_b) = `v_1) \/ (« null->b »@L1 = `v_1).
}
Prove: `x_2 = `x_1.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment