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 loc in
           Locations.Zone.join zone acc)
        lval_str
        Locations.Zone.bottom
    in
    select_stmt_zone set mark zone ~before ki kf