about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2022-08-31 14:21:35 +0200
committerRalf Jung <post@ralfj.de>2022-08-31 14:21:35 +0200
commitfe29ac9a4411836d9ec84947124411232e52b895 (patch)
treee574c76f6bc9633dfa78143e7470ea8bbf355af6
parent7f442f8ba174fd4233a14ef4d7b577aa907db594 (diff)
downloadrust-fe29ac9a4411836d9ec84947124411232e52b895.tar.gz
rust-fe29ac9a4411836d9ec84947124411232e52b895.zip
fix into_iter on ZST
-rw-r--r--library/alloc/src/vec/into_iter.rs2
-rw-r--r--library/alloc/tests/vec.rs6
2 files changed, 7 insertions, 1 deletions
diff --git a/library/alloc/src/vec/into_iter.rs b/library/alloc/src/vec/into_iter.rs
index ed049194dd0..b4157fd5895 100644
--- a/library/alloc/src/vec/into_iter.rs
+++ b/library/alloc/src/vec/into_iter.rs
@@ -266,7 +266,7 @@ impl<T, A: Allocator> DoubleEndedIterator for IntoIter<T, A> {
             None
         } else if mem::size_of::<T>() == 0 {
             // See above for why 'ptr.offset' isn't used
-            self.end = self.ptr.wrapping_byte_sub(1);
+            self.end = self.end.wrapping_byte_sub(1);
 
             // Make up a value of this ZST.
             Some(unsafe { mem::zeroed() })
diff --git a/library/alloc/tests/vec.rs b/library/alloc/tests/vec.rs
index 4c118455a3f..f140fc4143f 100644
--- a/library/alloc/tests/vec.rs
+++ b/library/alloc/tests/vec.rs
@@ -1105,6 +1105,12 @@ fn test_into_iter_drop_allocator() {
 }
 
 #[test]
+fn test_into_iter_zst() {
+    for _ in vec![[0u64; 0]].into_iter() {}
+    for _ in vec![[0u64; 0]; 5].into_iter().rev() {}
+}
+
+#[test]
 fn test_from_iter_specialization() {
     let src: Vec<usize> = vec![0usize; 1];
     let srcptr = src.as_ptr();