diff options
| author | Ralf Jung <post@ralfj.de> | 2022-08-31 14:21:35 +0200 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2022-08-31 14:21:35 +0200 |
| commit | fe29ac9a4411836d9ec84947124411232e52b895 (patch) | |
| tree | e574c76f6bc9633dfa78143e7470ea8bbf355af6 | |
| parent | 7f442f8ba174fd4233a14ef4d7b577aa907db594 (diff) | |
| download | rust-fe29ac9a4411836d9ec84947124411232e52b895.tar.gz rust-fe29ac9a4411836d9ec84947124411232e52b895.zip | |
fix into_iter on ZST
| -rw-r--r-- | library/alloc/src/vec/into_iter.rs | 2 | ||||
| -rw-r--r-- | library/alloc/tests/vec.rs | 6 |
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(); |
