turns out that was a really easy fix
This commit is contained in:
parent
9cd5a6b309
commit
b42bee180e
15
src/lib.rs
15
src/lib.rs
|
@ -67,7 +67,7 @@
|
||||||
//!
|
//!
|
||||||
//! Finally, a vector can be `unsize`d to another vector:
|
//! Finally, a vector can be `unsize`d to another vector:
|
||||||
//!
|
//!
|
||||||
//! ```should_panic
|
//! ```
|
||||||
//! # use dyn_vec::prelude::{*, vec};
|
//! # use dyn_vec::prelude::{*, vec};
|
||||||
//! # use std::fmt::Debug;
|
//! # use std::fmt::Debug;
|
||||||
//! let vec: Vec<i32> = vec![1, 2, 3];
|
//! let vec: Vec<i32> = vec![1, 2, 3];
|
||||||
|
@ -438,10 +438,15 @@ impl<T: ?Sized> Vec<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Converts a `Vec<T: Sized>` into a `Vec<U: ?Sized>`, given that `T` can be `CoerceUnsized` into `U`.
|
/// Converts a `Vec<T: Sized>` into a `Vec<U: ?Sized>`, given that `T` can be `CoerceUnsized` into `U`.
|
||||||
pub fn unsize<U: ?Sized>(self) -> Vec<U> where for<'a> &'a T: CoerceUnsized<&'a U> {
|
pub fn unsize<U: ?Sized>(mut self) -> Vec<U> where for<'a> &'a T: CoerceUnsized<&'a U> {
|
||||||
#![allow(unreachable_code)]
|
if size_of::<Extra<U>>() > size_of::<Extra<T>>() {
|
||||||
// FIXME: when fixed, make the 2 relevant tests not should_panic (test::unsize and the line 70 doctest)
|
let elem_size = self.end_ptr.as_ptr() as usize - self.ptr.as_ptr() as usize;
|
||||||
panic!("Vec::unsize is unsound rn, sorry yall");
|
let extra_size = self.len * size_of::<Extra<U>>();
|
||||||
|
let needed_size = elem_size + extra_size;
|
||||||
|
if needed_size > self.capacity {
|
||||||
|
unsafe { self.realloc(needed_size); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let new_vec = Vec::<U> {
|
let new_vec = Vec::<U> {
|
||||||
ptr: self.ptr,
|
ptr: self.ptr,
|
||||||
|
|
|
@ -189,7 +189,6 @@ fn with_capacity() {
|
||||||
assert_ne!(prev_ptr, vec.as_ptr());
|
assert_ne!(prev_ptr, vec.as_ptr());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[should_panic = "Vec::unsize is unsound rn, sorry yall"]
|
|
||||||
#[test]
|
#[test]
|
||||||
fn unsize() {
|
fn unsize() {
|
||||||
let vec = vec![1, 2, 3];
|
let vec = vec![1, 2, 3];
|
||||||
|
|
Loading…
Reference in a new issue