Skip to content

Commit

Permalink
Rollup merge of rust-lang#61244 - RalfJung:box, r=rkruppe
Browse files Browse the repository at this point in the history
Box::into_vec: use Box::into_raw instead of mem::forget

`Box::into_raw` does, in one step, turn the `Box` into a raw ptr and avoid deallocation.  Seems cleaner than separating the two.

Also, `mem::forget` gets the `Box` with a `noalias` argument, but it is not actually correct that this is an exclusive pointer. So a stricter version of Stacked Borrows would complain here. (I can't actually make Stacked Borrows that strict yet though due to other issues.)
  • Loading branch information
Centril authored May 30, 2019
2 parents 6351267 + 645f685 commit 1b66a13
Showing 1 changed file with 4 additions and 5 deletions.
9 changes: 4 additions & 5 deletions src/liballoc/slice.rs
Original file line number Diff line number Diff line change
Expand Up @@ -137,17 +137,16 @@ pub use hack::to_vec;
// `core::slice::SliceExt` - we need to supply these functions for the
// `test_permutations` test
mod hack {
use core::mem;

use crate::boxed::Box;
use crate::vec::Vec;
#[cfg(test)]
use crate::string::ToString;

pub fn into_vec<T>(mut b: Box<[T]>) -> Vec<T> {
pub fn into_vec<T>(b: Box<[T]>) -> Vec<T> {
unsafe {
let xs = Vec::from_raw_parts(b.as_mut_ptr(), b.len(), b.len());
mem::forget(b);
let len = b.len();
let b = Box::into_raw(b);
let xs = Vec::from_raw_parts(b as *mut T, len, len);
xs
}
}
Expand Down

0 comments on commit 1b66a13

Please sign in to comment.