Skip to content
Snippets Groups Projects
Commit 51106b7e authored by Pierre Loic Garoche's avatar Pierre Loic Garoche
Browse files

Fixing issues with changes in machine code

parent 59803095
No related branches found
No related tags found
No related merge requests found
...@@ -57,7 +57,8 @@ let build_cex machine machines decl_err = ...@@ -57,7 +57,8 @@ let build_cex machine machines decl_err =
(* Recall that MAIN args are in@mems@out *) (* Recall that MAIN args are in@mems@out *)
let args = Z3.Expr.get_args conj in let args = Z3.Expr.get_args conj in
if List.length args = 1 + nb_inputs + nb_mems + nb_outputs then if List.length args = 1 + nb_inputs + nb_mems + nb_outputs then
let id = Z3.Arithmetic.Integer.get_int (List.hd args) in (* Should be done with get_int but that function vanished from the opam Z3 API *)
let id = Big_int.int_of_big_int (Z3.Arithmetic.Integer.get_big_int (List.hd args)) in
let input_values = Utils.List.extract args 1 (1 + nb_inputs) in let input_values = Utils.List.extract args 1 (1 + nb_inputs) in
let output_values = Utils.List.extract args (1+nb_inputs+nb_mems) (1 + nb_inputs + nb_mems + nb_outputs) in let output_values = Utils.List.extract args (1+nb_inputs+nb_mems) (1 + nb_inputs + nb_mems + nb_outputs) in
(id, (input_values, output_values))::main, funs (id, (input_values, output_values))::main, funs
......
...@@ -366,7 +366,7 @@ let horn_basic_app i val_to_expr vl = ...@@ -366,7 +366,7 @@ let horn_basic_app i val_to_expr vl =
is a printer for variables (typically [pp_c_var_read]), but an offset suffix is a printer for variables (typically [pp_c_var_read]), but an offset suffix
may be added for array variables may be added for array variables
*) *)
let rec horn_val_to_expr ?(is_lhs=false) self v = let rec horn_val_to_expr ?(is_lhs=false) m self v =
match v.value_desc with match v.value_desc with
| Cst c -> horn_const_to_expr c | Cst c -> horn_const_to_expr c
...@@ -393,28 +393,30 @@ let rec horn_val_to_expr ?(is_lhs=false) self v = ...@@ -393,28 +393,30 @@ let rec horn_val_to_expr ?(is_lhs=false) self v =
!ctx !ctx
(build_array (t, (x+1))) (build_array (t, (x+1)))
(Z3.Arithmetic.Integer.mk_numeral_i !ctx x) (Z3.Arithmetic.Integer.mk_numeral_i !ctx x)
(horn_val_to_expr ~is_lhs:is_lhs self h) (horn_val_to_expr ~is_lhs:is_lhs m self h)
in in
build_array (il, 0) build_array (il, 0)
| Access(tab,index) -> | Access(tab,index) ->
Z3.Z3Array.mk_select !ctx Z3.Z3Array.mk_select !ctx
(horn_val_to_expr ~is_lhs:is_lhs self tab) (horn_val_to_expr ~is_lhs:is_lhs m self tab)
(horn_val_to_expr ~is_lhs:is_lhs self index) (horn_val_to_expr ~is_lhs:is_lhs m self index)
(* Code specific for arrays *) (* Code specific for arrays *)
| Power (v, n) -> assert false | Power (v, n) -> assert false
| LocalVar v -> | Var v ->
horn_var_to_expr if is_memory m v then
(rename_machine if Types.is_array_type v.var_type
self then assert false
v) else horn_var_to_expr (rename_machine self ((if is_lhs then rename_next else rename_current) (* self *) v))
| StateVar v ->
if Types.is_array_type v.var_type else
then assert false horn_var_to_expr
else horn_var_to_expr (rename_machine self ((if is_lhs then rename_next else rename_current) (* self *) v)) (rename_machine
| Fun (n, vl) -> horn_basic_app n (horn_val_to_expr self) vl self
v)
| Fun (n, vl) -> horn_basic_app n (horn_val_to_expr m self) vl
let no_reset_to_exprs machines m i = let no_reset_to_exprs machines m i =
let (n,_) = List.assoc i m.minstances in let (n,_) = List.assoc i m.minstances in
...@@ -478,8 +480,8 @@ let instance_call_to_exprs machines reset_instances m i inputs outputs = ...@@ -478,8 +480,8 @@ let instance_call_to_exprs machines reset_instances m i inputs outputs =
let idx = horn_var_to_expr idx in let idx = horn_var_to_expr idx in
let uid = uid_conc (get_instance_uid i) (horn_var_to_expr uid) in let uid = uid_conc (get_instance_uid i) (horn_var_to_expr uid) in
let inout = let inout =
List.map (horn_val_to_expr self) List.map (horn_val_to_expr m self)
(inputs @ (List.map (fun v -> mk_val (LocalVar v) v.var_type) outputs)) (inputs @ (List.map (fun v -> mk_val (Var v) v.var_type) outputs))
in in
idx::uid::inout idx::uid::inout
in in
...@@ -509,16 +511,16 @@ let instance_call_to_exprs machines reset_instances m i inputs outputs = ...@@ -509,16 +511,16 @@ let instance_call_to_exprs machines reset_instances m i inputs outputs =
let stmt1 = (* out = ite mem_m then i1 else i2 *) let stmt1 = (* out = ite mem_m then i1 else i2 *)
Z3.Boolean.mk_eq !ctx Z3.Boolean.mk_eq !ctx
( (* output var *) ( (* output var *)
horn_val_to_expr horn_val_to_expr
~is_lhs:true ~is_lhs:true
self m self
(mk_val (LocalVar o) o.var_type) (mk_val (Var o) o.var_type)
) )
( (
Z3.Boolean.mk_ite !ctx Z3.Boolean.mk_ite !ctx
(horn_var_to_expr mem_m) (horn_var_to_expr mem_m)
(horn_val_to_expr self i1) (horn_val_to_expr m self i1)
(horn_val_to_expr self i2) (horn_val_to_expr m self i2)
) )
in in
let stmt2 = (* mem_X = false *) let stmt2 = (* mem_X = false *)
...@@ -578,8 +580,8 @@ let assign_to_exprs m var_name value = ...@@ -578,8 +580,8 @@ let assign_to_exprs m var_name value =
let e = let e =
Z3.Boolean.mk_eq Z3.Boolean.mk_eq
!ctx !ctx
(horn_val_to_expr ~is_lhs:true self var_name) (horn_val_to_expr ~is_lhs:true m self var_name)
(horn_val_to_expr self value) (horn_val_to_expr m self value)
(* was: TODO deal with array accesses (value_suffix_to_expr self value) *) (* was: TODO deal with array accesses (value_suffix_to_expr self value) *)
in in
[e] [e]
...@@ -598,12 +600,12 @@ let rec instr_to_exprs machines reset_instances (m: machine_t) instr : Z3.Expr.e ...@@ -598,12 +600,12 @@ let rec instr_to_exprs machines reset_instances (m: machine_t) instr : Z3.Expr.e
| MLocalAssign (i,v) -> | MLocalAssign (i,v) ->
assign_to_exprs assign_to_exprs
m m
(mk_val (LocalVar i) i.var_type) v, (mk_val (Var i) i.var_type) v,
reset_instances reset_instances
| MStateAssign (i,v) -> | MStateAssign (i,v) ->
assign_to_exprs assign_to_exprs
m m
(mk_val (StateVar i) i.var_type) v, (mk_val (Var i) i.var_type) v,
reset_instances reset_instances
| MStep ([i0], i, vl) when Basic_library.is_internal_fun i (List.map (fun v -> v.value_type) vl) -> | MStep ([i0], i, vl) when Basic_library.is_internal_fun i (List.map (fun v -> v.value_type) vl) ->
assert false (* This should not happen anymore *) assert false (* This should not happen anymore *)
...@@ -629,7 +631,7 @@ let rec instr_to_exprs machines reset_instances (m: machine_t) instr : Z3.Expr.e ...@@ -629,7 +631,7 @@ let rec instr_to_exprs machines reset_instances (m: machine_t) instr : Z3.Expr.e
let e = let e =
Z3.Boolean.mk_implies !ctx Z3.Boolean.mk_implies !ctx
(Z3.Boolean.mk_eq !ctx (Z3.Boolean.mk_eq !ctx
(horn_val_to_expr self g) (horn_val_to_expr m self g)
(horn_tag_to_expr tag)) (horn_tag_to_expr tag))
branch_def in branch_def in
...@@ -857,7 +859,7 @@ let decl_machine machines m = ...@@ -857,7 +859,7 @@ let decl_machine machines m =
begin begin
(*Rule for step "; Stateless step rule with Assertions @.";*) (*Rule for step "; Stateless step rule with Assertions @.";*)
let body_with_asserts = let body_with_asserts =
Z3.Boolean.mk_and !ctx (horn_body :: List.map (horn_val_to_expr m.mname.node_id) assertsl) Z3.Boolean.mk_and !ctx (horn_body :: List.map (horn_val_to_expr m m.mname.node_id) assertsl)
in in
let vars = rename_machine_list m.mname.node_id m.mstep.step_locals in let vars = rename_machine_list m.mname.node_id m.mstep.step_locals in
add_rule vars (Z3.Boolean.mk_implies !ctx body_with_asserts horn_head) add_rule vars (Z3.Boolean.mk_implies !ctx body_with_asserts horn_head)
...@@ -915,7 +917,7 @@ let decl_machine machines m = ...@@ -915,7 +917,7 @@ let decl_machine machines m =
(* Rule for step Assertions @.; *) (* Rule for step Assertions @.; *)
let body_with_asserts = let body_with_asserts =
Z3.Boolean.mk_and !ctx Z3.Boolean.mk_and !ctx
(horn_step_body :: List.map (horn_val_to_expr m.mname.node_id) assertsl) (horn_step_body :: List.map (horn_val_to_expr m m.mname.node_id) assertsl)
in in
let vars = (step_vars_c_m_x machines m) @(rename_machine_list m.mname.node_id m.mstep.step_locals) in let vars = (step_vars_c_m_x machines m) @(rename_machine_list m.mname.node_id m.mstep.step_locals) in
add_rule (idx::uid::vars) (Z3.Boolean.mk_implies !ctx body_with_asserts horn_step_head) add_rule (idx::uid::vars) (Z3.Boolean.mk_implies !ctx body_with_asserts horn_step_head)
......
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