Skip to content

Commit 8dbb8bc

Browse files
committed
Use get_mval in BaseInvariant
1 parent 05a2ce9 commit 8dbb8bc

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

src/analyses/base.ml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1884,6 +1884,7 @@ struct
18841884
let convert_offset = convert_offset
18851885

18861886
let get_var = get_var
1887+
let get_mval ~man st mval exp = get_mval ~man st mval exp
18871888
let get ~man st addrs exp = get ~man st addrs exp
18881889
let set ~man st lval lval_type ?lval_raw value = set ~man ~invariant:true st lval lval_type ?lval_raw value
18891890

@@ -3061,6 +3062,7 @@ struct
30613062
(* all updates happen in man with top values *)
30623063
let get_var = get_var
30633064
let get ~man st addrs exp = get ~man st addrs exp
3065+
let get_mval ~man st mval exp = get_mval ~man st mval exp
30643066
let set ~man st lval lval_type ?lval_raw value = set ~man ~invariant:false st lval lval_type ?lval_raw value (* TODO: should have invariant false? doesn't work with empty cpa then, because meets *)
30653067

30663068
let refine_entire_var = false

src/analyses/baseInvariant.ml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ sig
2323
val convert_offset: man:(D.t, G.t, _, V.t) Analyses.man -> D.t -> offset -> ID.t Offset.t
2424

2525
val get_var: man:(D.t, G.t, _, V.t) Analyses.man -> D.t -> varinfo -> VD.t
26+
val get_mval: man:(D.t, G.t, _, V.t) Analyses.man -> D.t -> PreValueDomain.Addr.Mval.t -> exp option -> VD.t
2627
val get: man:(D.t, G.t, _, V.t) Analyses.man -> D.t -> AD.t -> exp option -> VD.t
2728
val set: man:(D.t, G.t, _, V.t) Analyses.man -> D.t -> AD.t -> typ -> ?lval_raw:lval -> VD.t -> D.t
2829

@@ -119,12 +120,12 @@ struct
119120
let res = AD.fold (fun base_a acc ->
120121
Option.bind acc (fun acc ->
121122
match base_a with
122-
| Addr _ ->
123+
| Addr base_mval ->
123124
let (lval_a:VD.t) = Address (AD.singleton base_a) in
124125
if M.tracing then M.tracel "inv" "Consider case of lval %a = %a" d_lval lv VD.pretty lval_a;
125126
let st = set' lv lval_a st in
126-
let orig = AD.Addr.add_offset base_a original_offset in
127-
let old_val = get ~man st (AD.singleton orig) None in
127+
let orig = PreValueDomain.Addr.Mval.add_offset base_mval original_offset in
128+
let old_val = get_mval ~man st orig None in
128129
let old_val = VD.cast ~kind:Internal (Cilfacade.typeOfLval x) old_val in (* needed as the type of this pointer may be different *) (* TODO: proper castkind *)
129130
(* this what I would originally have liked to do, but eval_rv_lval_refine uses queries and thus stale values *)
130131
(* let old_val = eval_rv_lval_refine ~man st exp x in *)

0 commit comments

Comments
 (0)