From: Havvy Date: Wed, 13 Sep 2017 08:27:41 +0000 (-0700) Subject: Fix example in transmute; add safety requirement to Vec::from_raw_parts X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=9dd2ee1942b232246bd87805c2be471af9fad20a;p=rust.git Fix example in transmute; add safety requirement to Vec::from_raw_parts --- diff --git a/src/liballoc/vec.rs b/src/liballoc/vec.rs index 8141851b8c9..87b2b3f7a40 100644 --- a/src/liballoc/vec.rs +++ b/src/liballoc/vec.rs @@ -370,6 +370,7 @@ pub fn with_capacity(capacity: usize) -> Vec { /// /// * `ptr` needs to have been previously allocated via [`String`]/`Vec` /// (at least, it's highly likely to be incorrect if it wasn't). + /// * `ptr`'s `T` needs to have the same size and alignment as it was allocated with. /// * `length` needs to be less than or equal to `capacity`. /// * `capacity` needs to be the capacity that the pointer was allocated with. /// diff --git a/src/libcore/intrinsics.rs b/src/libcore/intrinsics.rs index 607f6f37017..f7f1dd12d28 100644 --- a/src/libcore/intrinsics.rs +++ b/src/libcore/intrinsics.rs @@ -848,12 +848,12 @@ /// // The no-copy, unsafe way, still using transmute, but not UB. /// // This is equivalent to the original, but safer, and reuses the /// // same Vec internals. Therefore the new inner type must have the - /// // exact same size, and the same or lesser alignment, as the old - /// // type. The same caveats exist for this method as transmute, for + /// // exact same size, and the same alignment, as the old type. + /// // The same caveats exist for this method as transmute, for /// // the original inner type (`&i32`) to the converted inner type /// // (`Option<&i32>`), so read the nomicon pages linked above. /// let v_from_raw = unsafe { - /// Vec::from_raw_parts(v_orig.as_mut_ptr(), + /// Vec::from_raw_parts(v_orig.as_mut_ptr() as *mut Option<&i32>, /// v_orig.len(), /// v_orig.capacity()) /// };