Skip to content

Commit 7779a11

Browse files
committed
Use step_unchecked more liberally
1 parent 036b5fe commit 7779a11

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

src/libcore/iter/range.rs

+12-12
Original file line numberDiff line numberDiff line change
@@ -490,9 +490,6 @@ impl<A: Step> Iterator for ops::Range<A> {
490490
fn next(&mut self) -> Option<A> {
491491
if self.start < self.end {
492492
// SAFETY: just checked precondition
493-
// We use the unchecked version here, because
494-
// this helps LLVM vectorize loops for some ranges
495-
// that don't get vectorized otherwise.
496493
let n = unsafe { Step::forward_unchecked(self.start.clone(), 1) };
497494
Some(mem::replace(&mut self.start, n))
498495
} else {
@@ -514,7 +511,8 @@ impl<A: Step> Iterator for ops::Range<A> {
514511
fn nth(&mut self, n: usize) -> Option<A> {
515512
if let Some(plus_n) = Step::forward_checked(self.start.clone(), n) {
516513
if plus_n < self.end {
517-
self.start = Step::forward(plus_n.clone(), 1);
514+
// SAFETY: just checked precondition
515+
self.start = unsafe { Step::forward_unchecked(plus_n.clone(), 1) };
518516
return Some(plus_n);
519517
}
520518
}
@@ -575,7 +573,8 @@ impl<A: Step> DoubleEndedIterator for ops::Range<A> {
575573
#[inline]
576574
fn next_back(&mut self) -> Option<A> {
577575
if self.start < self.end {
578-
self.end = Step::backward(self.end.clone(), 1);
576+
// SAFETY: just checked precondition
577+
self.end = unsafe { Step::backward_unchecked(self.end.clone(), 1) };
579578
Some(self.end.clone())
580579
} else {
581580
None
@@ -586,7 +585,8 @@ impl<A: Step> DoubleEndedIterator for ops::Range<A> {
586585
fn nth_back(&mut self, n: usize) -> Option<A> {
587586
if let Some(minus_n) = Step::backward_checked(self.end.clone(), n) {
588587
if minus_n > self.start {
589-
self.end = Step::backward(minus_n, 1);
588+
// SAFETY: just checked precondition
589+
self.end = unsafe { Step::backward_unchecked(minus_n, 1) };
590590
return Some(self.end.clone());
591591
}
592592
}
@@ -643,9 +643,6 @@ impl<A: Step> Iterator for ops::RangeInclusive<A> {
643643
let is_iterating = self.start < self.end;
644644
Some(if is_iterating {
645645
// SAFETY: just checked precondition
646-
// We use the unchecked version here, because
647-
// otherwise `for _ in '\0'..=char::MAX`
648-
// does not successfully remove panicking code.
649646
let n = unsafe { Step::forward_unchecked(self.start.clone(), 1) };
650647
mem::replace(&mut self.start, n)
651648
} else {
@@ -708,7 +705,8 @@ impl<A: Step> Iterator for ops::RangeInclusive<A> {
708705
let mut accum = init;
709706

710707
while self.start < self.end {
711-
let n = Step::forward(self.start.clone(), 1);
708+
// SAFETY: just checked precondition
709+
let n = unsafe { Step::forward_unchecked(self.start.clone(), 1) };
712710
let n = mem::replace(&mut self.start, n);
713711
accum = f(accum, n)?;
714712
}
@@ -761,7 +759,8 @@ impl<A: Step> DoubleEndedIterator for ops::RangeInclusive<A> {
761759
}
762760
let is_iterating = self.start < self.end;
763761
Some(if is_iterating {
764-
let n = Step::backward(self.end.clone(), 1);
762+
// SAFETY: just checked precondition
763+
let n = unsafe { Step::backward_unchecked(self.end.clone(), 1) };
765764
mem::replace(&mut self.end, n)
766765
} else {
767766
self.exhausted = true;
@@ -811,7 +810,8 @@ impl<A: Step> DoubleEndedIterator for ops::RangeInclusive<A> {
811810
let mut accum = init;
812811

813812
while self.start < self.end {
814-
let n = Step::backward(self.end.clone(), 1);
813+
// SAFETY: just checked precondition
814+
let n = unsafe { Step::backward_unchecked(self.end.clone(), 1) };
815815
let n = mem::replace(&mut self.end, n);
816816
accum = f(accum, n)?;
817817
}

0 commit comments

Comments
 (0)