]> git.lizzy.rs Git - rust.git/commitdiff
fix into_iter on ZST
authorRalf Jung <post@ralfj.de>
Wed, 31 Aug 2022 12:21:35 +0000 (14:21 +0200)
committerRalf Jung <post@ralfj.de>
Wed, 31 Aug 2022 12:21:35 +0000 (14:21 +0200)
library/alloc/src/vec/into_iter.rs
library/alloc/tests/vec.rs

index ed049194dd068d584c9f0604cfe09be892617508..b4157fd58954103340dfb9fb85f33fc7a3b4a9fc 100644 (file)
@@ -266,7 +266,7 @@ fn next_back(&mut self) -> Option<T> {
             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() })
index 4c118455a3fc39dd0f65742b75037c1ebece8f7d..f140fc4143f3f50c37b54a24cf8357e2b01d90d8 100644 (file)
@@ -1104,6 +1104,12 @@ unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: Layout) {
     assert_eq!(drop_count, 2);
 }
 
+#[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];