From f0bd0d989adcbbc8a0fc4974652c920cb217f075 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr>
Date: Tue, 28 Jan 2020 16:03:51 +0100
Subject: [PATCH] [Eva] Eval_term: renames the functions evaluating a
 term_lval.

- renames [eval_tlval] into [eval_term_as_lval], as it evaluates a term.
- renames [eval_thost_toffset] into [eval_tlval], as it evaluates a term_lval,
  and uses it instead of the previous [eval_tlval] when evaluating a term_lval.
---
 src/plugins/value/legacy/eval_terms.ml | 65 ++++++++++++--------------
 1 file changed, 31 insertions(+), 34 deletions(-)

diff --git a/src/plugins/value/legacy/eval_terms.ml b/src/plugins/value/legacy/eval_terms.ml
index 44ac39bcd7a..b7ca8fa0a29 100644
--- a/src/plugins/value/legacy/eval_terms.ml
+++ b/src/plugins/value/legacy/eval_terms.ml
@@ -353,10 +353,7 @@ let infer_binop_res_type op targ =
 
 (* This function could probably be in Logic_utils. It computes [*tsets],
    assuming that [tsets] has a pointer type. *)
-let deref_tsets tsets =
-  let star_tsets = Cil.mkTermMem ~addr:tsets ~off:TNoOffset in
-  let typ = Logic_typing.type_of_pointed tsets.term_type in
-  Logic_const.term (TLval star_tsets) typ
+let deref_tsets tsets = Cil.mkTermMem ~addr:tsets ~off:TNoOffset
 
 
 type logic_deps = Zone.t Logic_label.Map.t
@@ -733,15 +730,15 @@ let rec eval_term ~alarm_mode env t =
 
   (*  | TConst ((CStr | CWstr) Missing cases *)
 
-  | TAddrOf (thost, toffs) ->
-    let r = eval_thost_toffset ~alarm_mode env thost toffs in
+  | TAddrOf tlval ->
+    let r = eval_tlval ~alarm_mode env tlval in
     { etype = TPtr (r.etype, []);
       ldeps = r.ldeps;
       eunder = loc_bits_to_loc_bytes_under r.eunder;
       eover = loc_bits_to_loc_bytes r.eover }
 
-  | TStartOf (thost, toffs) ->
-    let r = eval_thost_toffset ~alarm_mode env thost toffs in
+  | TStartOf tlval ->
+    let r = eval_tlval ~alarm_mode env tlval in
     { etype = TPtr (Cil.typeOf_array_elem r.etype, []);
       ldeps = r.ldeps;
       eunder = loc_bits_to_loc_bytes_under r.eunder;
@@ -756,8 +753,8 @@ let rec eval_term ~alarm_mode env t =
     efloat Fval.(neg_infinity Single)
   | TLval (TVar {lv_name = "\\NaN"}, _) -> efloat Fval.nan
 
-  | TLval _ ->
-    let lval = eval_tlval ~alarm_mode env t in
+  | TLval tlval ->
+    let lval = eval_tlval ~alarm_mode env tlval in
     let typ = lval.etype in
     let size = Eval_typ.sizeof_lval_typ typ in
     let state = env_current_state env in
@@ -1165,7 +1162,7 @@ and eval_toffset ~alarm_mode env typ toffset =
 
   | TModel _ -> unsupported "model fields"
 
-and eval_thost_toffset ~alarm_mode env thost toffs =
+and eval_tlval ~alarm_mode env (thost, toffs) =
   let rhost = eval_tlhost ~alarm_mode env thost in
   let roffset = eval_toffset ~alarm_mode env rhost.etype toffs in
   { etype = roffset.etype;
@@ -1174,14 +1171,14 @@ and eval_thost_toffset ~alarm_mode env thost toffs =
     eover = Location_Bits.shift roffset.eover rhost.eover;
   }
 
-and eval_tlval ~alarm_mode env t =
+and eval_term_as_lval ~alarm_mode env t =
   match t.term_node with
-  | TLval (thost, toffs) ->
-    eval_thost_toffset ~alarm_mode env thost toffs
+  | TLval tlval ->
+    eval_tlval ~alarm_mode env tlval
   | Tunion l ->
     let eunder, eover, deps = List.fold_left
         (fun (accunder, accover, accdeps) t ->
-           let r = eval_tlval ~alarm_mode env t in
+           let r = eval_term_as_lval ~alarm_mode env t in
            Location_Bits.link accunder r.eunder,
            Location_Bits.join accover r.eover,
            join_logic_deps accdeps r.ldeps
@@ -1197,13 +1194,13 @@ and eval_tlval ~alarm_mode env t =
       eover = Location_Bits.bottom }
   | Tat (t, lab) ->
     ignore (env_state env lab);
-    eval_tlval ~alarm_mode { env with e_cur = lab } t
+    eval_term_as_lval ~alarm_mode { env with e_cur = lab } t
   | TLogic_coerce (_lt, t) ->
     (* Logic coerce on locations (that are pointers) can only introduce
        sets, that do not change the abstract value. *)
-    eval_tlval ~alarm_mode env t
+    eval_term_as_lval ~alarm_mode env t
   | Tif (tcond, ttrue, tfalse) ->
-    eval_tif eval_tlval Location_Bits.join Location_Bits.meet ~alarm_mode env
+    eval_tif eval_term_as_lval Location_Bits.join Location_Bits.meet ~alarm_mode env
       tcond ttrue tfalse
   | _ -> ast_error (Format.asprintf "non-lval term %a" Printer.pp_term t)
 
@@ -1325,19 +1322,19 @@ and eval_extremum etype backward_left ~alarm_mode env t1 t2 =
 
 
 let eval_tlval_as_location ~alarm_mode env t =
-  let r = eval_tlval ~alarm_mode env t in
+  let r = eval_term_as_lval ~alarm_mode env t in
   let s = Eval_typ.sizeof_lval_typ r.etype in
   make_loc r.eover s
 
 let eval_tlval_as_location_with_deps ~alarm_mode env t =
-  let r = eval_tlval ~alarm_mode env t in
+  let r = eval_term_as_lval ~alarm_mode env t in
   let s = Eval_typ.sizeof_lval_typ r.etype in
   (make_loc r.eover s, r.ldeps)
 
 
 (* Return a pair of (under-approximating, over-approximating) zones. *)
 let eval_tlval_as_zone_under_over ~alarm_mode access env t =
-  let r = eval_tlval ~alarm_mode env t in
+  let r = eval_term_as_lval ~alarm_mode env t in
   let s = Eval_typ.sizeof_lval_typ r.etype in
   let under = enumerate_valid_bits_under access (make_loc r.eunder s) in
   let over = enumerate_valid_bits access (make_loc r.eover s) in
@@ -1383,8 +1380,8 @@ exception Not_an_exact_loc
    [Not_an_exact_loc]. *)
 let rec eval_term_as_exact_locs ~alarm_mode env t =
   match t with
-  | { term_node = TLval _ } ->
-    let loc = eval_tlval ~alarm_mode env t in
+  | { term_node = TLval tlval } ->
+    let loc = eval_tlval ~alarm_mode env tlval in
     let typ = loc.etype in
     (* eval_term_as_exact_loc is only used for reducing values, and we must
        NOT reduce volatile locations. *)
@@ -1639,10 +1636,10 @@ let reduce_by_valid env positive access (tset: term) =
   (* reduce [t], which must be valid term-lval, so that its contents are
      a valid pointer to [typ]. If [typ] is not supplied, it is inferred
      from the type of [t]. *)
-  let aux_lval ?typ t env =
+  let aux_lval ?typ tlval env =
     try
       let alarm_mode = alarm_reduce_mode () in
-      let r = eval_tlval ~alarm_mode env t in
+      let r = eval_tlval ~alarm_mode env tlval in
       let typ = match typ with None -> r.etype | Some t -> t in
       let loc = make_loc r.eunder (Eval_typ.sizeof_lval_typ typ) in
       let r = Eval_op.apply_on_all_locs (aux_one_lval typ) loc env in
@@ -1654,14 +1651,14 @@ let reduce_by_valid env positive access (tset: term) =
     | Tunion l ->
       List.fold_left do_one env l
 
-    | TLval _ -> aux_lval t env
+    | TLval tlval -> aux_lval tlval env
 
-    | TCastE (typ, ({term_node = TLval _} as t)) -> aux_lval ~typ t env
+    | TCastE (typ, {term_node = TLval tlval}) -> aux_lval ~typ tlval env
 
-    | TAddrOf (TMem ({term_node = TLval _} as t), offs) ->
+    | TAddrOf (TMem {term_node = TLval tlval}, offs) ->
       (try
          let alarm_mode = alarm_reduce_mode () in
-         let lt = eval_tlval ~alarm_mode env t in
+         let lt = eval_tlval ~alarm_mode env tlval in
          let typ = lt.etype in
          (* Compute the offsets, that depend on the type of the lval.
             The computed list is exactly what [aux] requires *)
@@ -1672,10 +1669,10 @@ let reduce_by_valid env positive access (tset: term) =
          aux_min_max_offset aux env roffs.eunder
        with LogicEvalError _ -> env)
 
-    | TBinOp ((PlusPI | MinusPI) as op, ({term_node = TLval _} as tlv), i) ->
+    | TBinOp ((PlusPI | MinusPI) as op, {term_node = TLval tlval}, i) ->
       (try
          let alarm_mode = alarm_reduce_mode () in
-         let rtlv = eval_tlval ~alarm_mode env tlv in
+         let rtlv = eval_tlval ~alarm_mode env tlval in
          let ri = eval_term ~alarm_mode env i in
          (* Convert offsets to a simpler form if [op] is [MinusPI] *)
          let li =
@@ -2402,7 +2399,7 @@ let predicate_deps env pred =
       do_eval { env with e_cur = lbl } p
 
     | Pvalid (_, tsets) | Pvalid_read (_, tsets) | Pvalid_function tsets->
-      (eval_tlval ~alarm_mode env tsets).ldeps
+      (eval_term_as_lval ~alarm_mode env tsets).ldeps
 
     | Pinitialized (lbl, tsets) | Pdangling (lbl, tsets) ->
       let loc, deploc =
@@ -2413,7 +2410,7 @@ let predicate_deps env pred =
     | Pnot p -> do_eval env p
 
     | Pseparated ltsets ->
-      let evaled = List.map (eval_tlval ~alarm_mode env) ltsets in
+      let evaled = List.map (eval_term_as_lval ~alarm_mode env) ltsets in
       List.fold_left
         (fun acc e -> join_logic_deps acc e.ldeps)
         empty_logic_deps evaled
@@ -2465,7 +2462,7 @@ let () =
     (fun ~result state t ->
        let env = env_post_f ~pre:state ~post:state ~result () in
        try
-         let r= eval_tlval ~alarm_mode:Ignore env t in
+         let r= eval_term_as_lval ~alarm_mode:Ignore env t in
          let s = Eval_typ.sizeof_lval_typ r.etype in
          make_loc r.eunder s, make_loc r.eover s, deps_at lbl_here r.ldeps
        with LogicEvalError _ -> raise Db.Properties.Interp.No_conversion
-- 
GitLab