about summary refs log tree commit diff
path: root/src/liballoc
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2020-04-04 19:32:21 +0200
committerRalf Jung <post@ralfj.de>2020-04-05 12:09:03 +0200
commit6cbe1726a70bac498bd46dc08c868f094117675c (patch)
tree515878fe1ed5d2762c86a6e4ea5eedeac2a6ef19 /src/liballoc
parent7b657d340d715f48449189fea9d032350323a13f (diff)
downloadrust-6cbe1726a70bac498bd46dc08c868f094117675c.tar.gz
rust-6cbe1726a70bac498bd46dc08c868f094117675c.zip
clarify safety in RawVec::into_box
Diffstat (limited to 'src/liballoc')
-rw-r--r--src/liballoc/raw_vec.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/liballoc/raw_vec.rs b/src/liballoc/raw_vec.rs
index 12e32fd9d35..7ac67870eb7 100644
--- a/src/liballoc/raw_vec.rs
+++ b/src/liballoc/raw_vec.rs
@@ -570,16 +570,19 @@ impl<T> RawVec<T, Global> {
     ///
     /// # Safety
     ///
-    /// `shrink_to_fit(len)` must be called immediately prior to calling this function. This
-    /// implies, that `len` must be smaller than or equal to `self.capacity()`.
+    /// * `len` must be greater than or equal to the most recently requested capacity, and
+    /// * `len` must be less than or equal to `self.capacity()`.
+    ///
+    /// Note, that the requested capacity and `self.capacity()` could differ, as
+    /// an allocator could overallocate and return a greater memory block than requested.
     pub unsafe fn into_box(self, len: usize) -> Box<[MaybeUninit<T>]> {
+        // Sanity-check one half of the safety requirement (we cannot check the other half).
         debug_assert!(
             len <= self.capacity(),
             "`len` must be smaller than or equal to `self.capacity()`"
         );
 
         let me = ManuallyDrop::new(self);
-        // NOTE: not calling `capacity()` here; actually using the real `cap` field!
         let slice = slice::from_raw_parts_mut(me.ptr() as *mut MaybeUninit<T>, len);
         Box::from_raw(slice)
     }