let select_stmt_lval set mark lval_str ~before ki ~scope ~eval kf =
  assert (Db.Value.is_computed ());
  if Cilutil.StringSet.is_empty lval_str
  then set
  else
    let zone =
      Cilutil.StringSet.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 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 loc
           in Locations.Zone.join zone acc)
        lval_str Locations.Zone.bottom
    in select_stmt_zone set mark zone ~before ki kf