From cdde6e8c2188c2bd80ed0ffa01fc7142772af129 Mon Sep 17 00:00:00 2001 From: Allan Blanchard <allan.blanchard@cea.fr> Date: Fri, 10 Jul 2020 15:04:06 +0200 Subject: [PATCH] [Kernel] Status_by_call changes node after visit for replacement --- .../ast_data/statuses_by_call.ml | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/kernel_services/ast_data/statuses_by_call.ml b/src/kernel_services/ast_data/statuses_by_call.ml index 2487ade6c49..24779c45007 100644 --- a/src/kernel_services/ast_data/statuses_by_call.ml +++ b/src/kernel_services/ast_data/statuses_by_call.ml @@ -111,23 +111,27 @@ let replacement_visitor ~arguments = object (self) | TVar { lv_origin = Some vinfo } when vinfo.vformal -> if under_label then raise Non_Transposable; begin - let new_term = replace_formal_by_concrete vinfo arguments in - let add_offset lv = TLval (Logic_const.addTermOffsetLval t_offset lv) in - match new_term.term_node with - | TLval lv -> Cil.ChangeDoChildrenPost (add_offset lv, fun x -> x) - | _ -> - if t_offset = TNoOffset - then Cil.ChangeTo new_term.term_node - else - let ltyp = new_term.term_type in - let tmp_lvar = Cil.make_temp_logic_var ltyp in - let tmp_linfo = - { l_var_info = tmp_lvar; l_body = LBterm new_term; - l_type = None; l_tparams = []; l_labels = []; l_profile = []; } - in - let lval_node = TLval (TVar tmp_lvar, t_offset) in - let lval_term = Tlet (tmp_linfo, Logic_const.term lval_node ltyp) in - Cil.ChangeDoChildrenPost (lval_term, fun x -> x) + let post_replace _ = + let new_term = replace_formal_by_concrete vinfo arguments in + let add_offset lv = + TLval (Logic_const.addTermOffsetLval t_offset lv) + in + match new_term.term_node with + | TLval lv -> add_offset lv + | node -> + if t_offset = TNoOffset then node + else + let ltyp = new_term.term_type in + let tmp_lvar = Cil.make_temp_logic_var ltyp in + let tmp_linfo = + { l_var_info = tmp_lvar; l_body = LBterm new_term; + l_type = None; l_tparams = []; l_labels = []; + l_profile = []; } + in + let lval_node = TLval (TVar tmp_lvar, t_offset) in + Tlet (tmp_linfo, Logic_const.term lval_node ltyp) + in + Cil.DoChildrenPost post_replace end | _ -> Cil.DoChildren @@ -149,8 +153,7 @@ let replacement_visitor ~arguments = object (self) | _ -> Cil.DoChildren method! vlogic_label = function - | BuiltinLabel Pre -> - Cil.ChangeDoChildrenPost (Logic_const.here_label, fun x -> x) + | BuiltinLabel Pre -> Cil.DoChildrenPost (fun _ -> Logic_const.here_label) | _ -> Cil.DoChildren end -- GitLab