File tree Expand file tree Collapse file tree 1 file changed +8
-3
lines changed Expand file tree Collapse file tree 1 file changed +8
-3
lines changed Original file line number Diff line number Diff line change @@ -202,10 +202,15 @@ impl<T: ?Sized> Box<T> {
202202 #[ unstable( feature = "ptr_internals" , issue = "0" , reason = "use into_raw_non_null instead" ) ]
203203 #[ inline]
204204 #[ doc( hidden) ]
205- pub fn into_unique ( b : Box < T > ) -> Unique < T > {
206- let unique = b. 0 ;
205+ pub fn into_unique ( mut b : Box < T > ) -> Unique < T > {
206+ // Box is kind-of a library type, but recognized as a "unique pointer" by
207+ // Stacked Borrows. This function here corresponds to "reborrowing to
208+ // a raw pointer", but there is no actual reborrow here -- so
209+ // without some care, the pointer we are returning here still carries
210+ // the `Uniq` tag. We round-trip through a mutable reference to avoid that.
211+ let unique = unsafe { b. 0 . as_mut ( ) as * mut T } ;
207212 mem:: forget ( b) ;
208- unique
213+ unsafe { Unique :: new_unchecked ( unique) }
209214 }
210215
211216 /// Consumes and leaks the `Box`, returning a mutable reference,
You can’t perform that action at this time.
0 commit comments