let select_stmt_lval set mark lval_str ~before ki ~scope ~eval kf =
assert (Db.Value.is_computed ());
if Datatype.String.Set.is_empty lval_str
then set
else
let zone =
Datatype.String.Set.fold
(fun lval_str acc ->
let lval_term = !Db.Properties.Interp.lval kf scope lval_str in
let lval =
!Db.Properties.Interp.term_lval_to_lval ~result:None lval_term
in
let loc =
!Db.Value.lval_to_loc
~with_alarms:CilE.warn_none_mode
(Kstmt eval)
lval
in
let zone = Locations.valid_enumerate_bits ~for_writing:false loc in
Locations.Zone.join zone acc)
lval_str
Locations.Zone.bottom
in
select_stmt_zone set mark zone ~before ki kf