let assigns_to_zone_inputs_state state assigns =
try
let treat_one_zone acc (_,ins) =
if ins = [] then raise Top_input;
List.fold_left
(fun acc term ->
let loc_ins =
!Db.Properties.Interp.identified_term_zone_to_loc ~result:None
state
term
in
Zone.join
acc
(Locations.valid_enumerate_bits loc_ins))
acc
ins
in
match assigns with
[] -> Zone.bottom
| [Nothing,_] -> Zone.bottom
| _ ->
List.fold_left treat_one_zone Zone.bottom assigns
with
Top_input -> Zone.top
| Invalid_argument "not an lvalue" ->
CilE.warn_once "Failed to interpret assigns clause in inputs";
Zone.top