use crate::cmp::Ordering;
-use crate::ops::Try;
+use crate::ops::{Add, Try};
use super::super::LoopState;
use super::super::{Chain, Cycle, Copied, Cloned, Enumerate, Filter, FilterMap, Fuse};
#[inline]
#[stable(feature = "rust1", since = "1.0.0")]
fn count(self) -> usize where Self: Sized {
- // Might overflow.
#[inline]
- #[rustc_inherit_overflow_checks]
fn add1<T>(count: usize, _: T) -> usize {
- count + 1
+ // Might overflow.
+ Add::add(count, 1)
}
self.fold(0, add1)
--- /dev/null
+// run-pass
+// only-32bit too impatient for 2⁶⁴ items
+// ignore-wasm32-bare compiled with panic=abort by default
+// compile-flags: -C debug_assertions=yes
+
+use std::panic;
+use std::usize::MAX;
+
+fn main() {
+ assert_eq!((0..MAX).by_ref().count(), MAX);
+
+ let r = panic::catch_unwind(|| {
+ (0..=MAX).by_ref().count()
+ });
+ assert!(r.is_err());
+}
--- /dev/null
+// run-pass
+// only-32bit too impatient for 2⁶⁴ items
+// compile-flags: -C debug_assertions=no
+
+use std::panic;
+use std::usize::MAX;
+
+fn main() {
+ assert_eq!((0..MAX).by_ref().count(), MAX);
+ assert_eq!((0..=MAX).by_ref().count(), 0);
+}