|
23 | 23 | val convert_offset: man:(D.t, G.t, _, V.t) Analyses.man -> D.t -> offset -> ID.t Offset.t |
24 | 24 |
|
25 | 25 | 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 |
26 | 27 | val get: man:(D.t, G.t, _, V.t) Analyses.man -> D.t -> AD.t -> exp option -> VD.t |
27 | 28 | val set: man:(D.t, G.t, _, V.t) Analyses.man -> D.t -> AD.t -> typ -> ?lval_raw:lval -> VD.t -> D.t |
28 | 29 |
|
@@ -119,12 +120,12 @@ struct |
119 | 120 | let res = AD.fold (fun base_a acc -> |
120 | 121 | Option.bind acc (fun acc -> |
121 | 122 | match base_a with |
122 | | - | Addr _ -> |
| 123 | + | Addr base_mval -> |
123 | 124 | let (lval_a:VD.t) = Address (AD.singleton base_a) in |
124 | 125 | if M.tracing then M.tracel "inv" "Consider case of lval %a = %a" d_lval lv VD.pretty lval_a; |
125 | 126 | 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 |
128 | 129 | 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 *) |
129 | 130 | (* this what I would originally have liked to do, but eval_rv_lval_refine uses queries and thus stale values *) |
130 | 131 | (* let old_val = eval_rv_lval_refine ~man st exp x in *) |
|
0 commit comments