File tree 1 file changed +8
-3
lines changed
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> {
202
202
#[ unstable( feature = "ptr_internals" , issue = "0" , reason = "use into_raw_non_null instead" ) ]
203
203
#[ inline]
204
204
#[ 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 } ;
207
212
mem:: forget ( b) ;
208
- unique
213
+ unsafe { Unique :: new_unchecked ( unique) }
209
214
}
210
215
211
216
/// Consumes and leaks the `Box`, returning a mutable reference,
You can’t perform that action at this time.
0 commit comments