about summary refs log tree commit diff
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2015-02-15 18:30:56 +0530
committerManish Goregaokar <manishsmail@gmail.com>2015-02-15 18:42:44 +0530
commit1b86ebe25751268aa39ef2ad5e2b0e650a6f0291 (patch)
tree35f5e2c0b9ba4a12fc18d93a41363275cc9f9299
parent0f66e314db851f711dc544ecd91d9b4ceb76b932 (diff)
parentb19fda0ceb820af57f00976951dba95a3c0419aa (diff)
downloadrust-1b86ebe25751268aa39ef2ad5e2b0e650a6f0291.tar.gz
rust-1b86ebe25751268aa39ef2ad5e2b0e650a6f0291.zip
Rollup merge of #22299 - bluss:range-64-is-not-exact-size, r=alexcrichton
 Fixes #22047

`Range<u64>` and `Range<i64>` may be longer than usize::MAX on 32-bit
platforms, and thus they cannot fulfill the protocol for
ExactSizeIterator. We don't want a nonobvious platform dependency in
basic iterator traits, so the trait impl is removed.

The logic of this change assumes that usize is at least 32-bit.

This is technically a breaking change; note that `Range<usize>` and
`Range<isize>` are always ExactSizeIterators.

[breaking-change]
-rw-r--r--src/libcore/iter.rs4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs
index 7740cd6867c..06aba2cb08e 100644
--- a/src/libcore/iter.rs
+++ b/src/libcore/iter.rs
@@ -2676,9 +2676,9 @@ impl<A: Int> Iterator for ::ops::Range<A> {
     }
 }
 
+// Ranges of u64 and i64 are excluded because they cannot guarantee having
+// a length <= usize::MAX, which is required by ExactSizeIterator.
 range_exact_iter_impl!(usize u8 u16 u32 isize i8 i16 i32);
-#[cfg(target_pointer_width = "64")]
-range_exact_iter_impl!(u64 i64);
 
 #[stable(feature = "rust1", since = "1.0.0")]
 impl<A: Int> DoubleEndedIterator for ::ops::Range<A> {