Rollup merge of #88481 - bjorn3:remove_feature_gates, r=cjgillot

Remove some feature gates

The first commit removes various feature gates that are unused. The second commit replaces some `Fn` implementations with `Iterator` implementations, which is much cleaner IMO. The third commit replaces an unboxed_closures feature gate with min_specialization. For some reason the unboxed_closures feature gate suppresses the min_specialization feature gate from triggering on an `TrustedStep` impl. The last comment just turns a regular comment into a doc comment as drive by cleanup. I can move it to a separate PR if preferred.
This commit is contained in:
Manish Goregaokar 2021-10-03 23:13:20 -07:00 committed by GitHub
commit 5215b855b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 31 additions and 65 deletions

View File

@ -144,7 +144,7 @@ impl<R> MemberConstraintSet<'tcx, R>
where where
R: Copy + Hash + Eq, R: Copy + Hash + Eq,
{ {
crate fn all_indices(&self) -> impl Iterator<Item = NllMemberConstraintIndex> { crate fn all_indices(&self) -> impl Iterator<Item = NllMemberConstraintIndex> + '_ {
self.constraints.indices() self.constraints.indices()
} }

View File

@ -497,7 +497,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
} }
/// Returns an iterator over all the region indices. /// Returns an iterator over all the region indices.
pub fn regions(&self) -> impl Iterator<Item = RegionVid> { pub fn regions(&self) -> impl Iterator<Item = RegionVid> + '_ {
self.definitions.indices() self.definitions.indices()
} }

View File

@ -7,7 +7,6 @@
//! This API is completely unstable and subject to change. //! This API is completely unstable and subject to change.
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")] #![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
#![feature(allow_internal_unstable)]
#![feature(array_windows)] #![feature(array_windows)]
#![feature(associated_type_bounds)] #![feature(associated_type_bounds)]
#![feature(auto_traits)] #![feature(auto_traits)]

View File

@ -2,9 +2,8 @@
#![feature(bench_black_box)] #![feature(bench_black_box)]
#![feature(extend_one)] #![feature(extend_one)]
#![feature(iter_zip)] #![feature(iter_zip)]
#![feature(unboxed_closures)] #![feature(min_specialization)]
#![feature(test)] #![feature(test)]
#![feature(fn_traits)]
pub mod bit_set; pub mod bit_set;
pub mod vec; pub mod vec;

View File

@ -3,9 +3,9 @@ use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
use std::fmt; use std::fmt;
use std::fmt::Debug; use std::fmt::Debug;
use std::hash::Hash; use std::hash::Hash;
use std::iter::{self, FromIterator}; use std::iter::FromIterator;
use std::marker::PhantomData; use std::marker::PhantomData;
use std::ops::{Index, IndexMut, Range, RangeBounds}; use std::ops::{Index, IndexMut, RangeBounds};
use std::slice; use std::slice;
use std::vec; use std::vec;
@ -518,8 +518,6 @@ impl<I: Idx, T: fmt::Debug> fmt::Debug for IndexVec<I, T> {
} }
} }
pub type Enumerated<I, J> = iter::Map<iter::Enumerate<J>, IntoIdx<I>>;
impl<I: Idx, T> IndexVec<I, T> { impl<I: Idx, T> IndexVec<I, T> {
#[inline] #[inline]
pub fn new() -> Self { pub fn new() -> Self {
@ -596,8 +594,10 @@ impl<I: Idx, T> IndexVec<I, T> {
} }
#[inline] #[inline]
pub fn into_iter_enumerated(self) -> Enumerated<I, vec::IntoIter<T>> { pub fn into_iter_enumerated(
self.raw.into_iter().enumerate().map(IntoIdx { _marker: PhantomData }) self,
) -> impl DoubleEndedIterator<Item = (I, T)> + ExactSizeIterator {
self.raw.into_iter().enumerate().map(|(n, t)| (I::new(n), t))
} }
#[inline] #[inline]
@ -606,13 +606,15 @@ impl<I: Idx, T> IndexVec<I, T> {
} }
#[inline] #[inline]
pub fn iter_enumerated(&self) -> Enumerated<I, slice::Iter<'_, T>> { pub fn iter_enumerated(
self.raw.iter().enumerate().map(IntoIdx { _marker: PhantomData }) &self,
) -> impl DoubleEndedIterator<Item = (I, &T)> + ExactSizeIterator + '_ {
self.raw.iter().enumerate().map(|(n, t)| (I::new(n), t))
} }
#[inline] #[inline]
pub fn indices(&self) -> iter::Map<Range<usize>, IntoIdx<I>> { pub fn indices(&self) -> impl DoubleEndedIterator<Item = I> + ExactSizeIterator + 'static {
(0..self.len()).map(IntoIdx { _marker: PhantomData }) (0..self.len()).map(|n| I::new(n))
} }
#[inline] #[inline]
@ -621,8 +623,10 @@ impl<I: Idx, T> IndexVec<I, T> {
} }
#[inline] #[inline]
pub fn iter_enumerated_mut(&mut self) -> Enumerated<I, slice::IterMut<'_, T>> { pub fn iter_enumerated_mut(
self.raw.iter_mut().enumerate().map(IntoIdx { _marker: PhantomData }) &mut self,
) -> impl DoubleEndedIterator<Item = (I, &mut T)> + ExactSizeIterator + '_ {
self.raw.iter_mut().enumerate().map(|(n, t)| (I::new(n), t))
} }
#[inline] #[inline]
@ -638,7 +642,7 @@ impl<I: Idx, T> IndexVec<I, T> {
&'a mut self, &'a mut self,
range: R, range: R,
) -> impl Iterator<Item = (I, T)> + 'a { ) -> impl Iterator<Item = (I, T)> + 'a {
self.raw.drain(range).enumerate().map(IntoIdx { _marker: PhantomData }) self.raw.drain(range).enumerate().map(|(n, t)| (I::new(n), t))
} }
#[inline] #[inline]
@ -832,36 +836,5 @@ impl<'a, I: Idx, T> IntoIterator for &'a mut IndexVec<I, T> {
} }
} }
pub struct IntoIdx<I: Idx> {
_marker: PhantomData<fn(&I)>,
}
impl<I: Idx, T> FnOnce<((usize, T),)> for IntoIdx<I> {
type Output = (I, T);
extern "rust-call" fn call_once(self, ((n, t),): ((usize, T),)) -> Self::Output {
(I::new(n), t)
}
}
impl<I: Idx, T> FnMut<((usize, T),)> for IntoIdx<I> {
extern "rust-call" fn call_mut(&mut self, ((n, t),): ((usize, T),)) -> Self::Output {
(I::new(n), t)
}
}
impl<I: Idx> FnOnce<(usize,)> for IntoIdx<I> {
type Output = I;
extern "rust-call" fn call_once(self, (n,): (usize,)) -> Self::Output {
I::new(n)
}
}
impl<I: Idx> FnMut<(usize,)> for IntoIdx<I> {
extern "rust-call" fn call_mut(&mut self, (n,): (usize,)) -> Self::Output {
I::new(n)
}
}
#[cfg(test)] #[cfg(test)]
mod tests; mod tests;

View File

@ -26,7 +26,6 @@
//! This API is completely unstable and subject to change. //! This API is completely unstable and subject to change.
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")] #![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
#![cfg_attr(test, feature(test))]
#![feature(array_windows)] #![feature(array_windows)]
#![feature(bool_to_option)] #![feature(bool_to_option)]
#![feature(box_patterns)] #![feature(box_patterns)]

View File

@ -41,13 +41,11 @@
#![feature(once_cell)] #![feature(once_cell)]
#![feature(min_specialization)] #![feature(min_specialization)]
#![feature(trusted_len)] #![feature(trusted_len)]
#![feature(test)]
#![feature(in_band_lifetimes)] #![feature(in_band_lifetimes)]
#![feature(crate_visibility_modifier)] #![feature(crate_visibility_modifier)]
#![feature(associated_type_bounds)] #![feature(associated_type_bounds)]
#![feature(rustc_attrs)] #![feature(rustc_attrs)]
#![feature(half_open_range_patterns)] #![feature(half_open_range_patterns)]
#![feature(exclusive_range_pattern)]
#![feature(control_flow_enum)] #![feature(control_flow_enum)]
#![feature(associated_type_defaults)] #![feature(associated_type_defaults)]
#![feature(iter_zip)] #![feature(iter_zip)]

View File

@ -1,10 +1,10 @@
// This module contains some shared code for encoding and decoding various //! This module contains some shared code for encoding and decoding various
// things from the `ty` module, and in particular implements support for //! things from the `ty` module, and in particular implements support for
// "shorthands" which allow to have pointers back into the already encoded //! "shorthands" which allow to have pointers back into the already encoded
// stream instead of re-encoding the same thing twice. //! stream instead of re-encoding the same thing twice.
// //!
// The functionality in here is shared between persisting to crate metadata and //! The functionality in here is shared between persisting to crate metadata and
// persisting to incr. comp. caches. //! persisting to incr. comp. caches.
use crate::arena::ArenaAllocatable; use crate::arena::ArenaAllocatable;
use crate::infer::canonical::{CanonicalVarInfo, CanonicalVarInfos}; use crate::infer::canonical::{CanonicalVarInfo, CanonicalVarInfos};

View File

@ -1,6 +1,5 @@
use core::slice::Iter;
use rustc_data_structures::fx::FxHashMap; use rustc_data_structures::fx::FxHashMap;
use rustc_index::vec::{Enumerated, IndexVec}; use rustc_index::vec::IndexVec;
use rustc_middle::mir::*; use rustc_middle::mir::*;
use rustc_middle::ty::{ParamEnv, Ty, TyCtxt}; use rustc_middle::ty::{ParamEnv, Ty, TyCtxt};
use rustc_span::Span; use rustc_span::Span;
@ -337,7 +336,9 @@ impl MovePathLookup {
/// An enumerated iterator of `local`s and their associated /// An enumerated iterator of `local`s and their associated
/// `MovePathIndex`es. /// `MovePathIndex`es.
pub fn iter_locals_enumerated(&self) -> Enumerated<Local, Iter<'_, MovePathIndex>> { pub fn iter_locals_enumerated(
&self,
) -> impl DoubleEndedIterator<Item = (Local, &MovePathIndex)> + ExactSizeIterator {
self.locals.iter_enumerated() self.locals.iter_enumerated()
} }
} }

View File

@ -15,7 +15,6 @@
#![feature(exhaustive_patterns)] #![feature(exhaustive_patterns)]
#![feature(min_specialization)] #![feature(min_specialization)]
#![feature(step_trait)] #![feature(step_trait)]
#![feature(unchecked_math)]
use std::path::{Path, PathBuf}; use std::path::{Path, PathBuf};

View File

@ -6,8 +6,6 @@
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")] #![doc(html_root_url = "https://doc.rust-lang.org/nightly/nightly-rustc/")]
#![feature(control_flow_enum)] #![feature(control_flow_enum)]
#![feature(half_open_range_patterns)]
#![feature(exclusive_range_pattern)]
#![feature(nll)] #![feature(nll)]
#![recursion_limit = "256"] #![recursion_limit = "256"]