@@ -12,7 +12,7 @@ use crate::CPU;
12
12
use crate :: {
13
13
flag:: AllocFlag , shape:: Shape , Alloc , Base , ClearBuf , CloneBuf , Device , DevicelessAble , HasId ,
14
14
IsShapeIndep , OnDropBuffer , OnNewBuffer , PtrType , Read , ReplaceBuf , ShallowCopy , Unit ,
15
- WrappedData , WriteBuf , ZeroGrad ,
15
+ WrappedCopy , WrappedData , WriteBuf , ZeroGrad ,
16
16
} ;
17
17
18
18
pub use self :: num:: Num ;
@@ -479,11 +479,14 @@ impl<'a, T: Unit, D: Device, S: Shape> Buffer<'a, T, D, S> {
479
479
pub fn to_dims < O : Shape > ( self ) -> Buffer < ' a , T , D , O >
480
480
where
481
481
D : crate :: ToDim < T , S , O > ,
482
- D :: Data < T , S > : ShallowCopy ,
482
+ D :: Data < T , S > : WrappedCopy < Base = D :: Base < T , S > > ,
483
+ D :: Base < T , S > : ShallowCopy ,
483
484
{
485
+ let base = unsafe { ( * self ) . shallow ( ) } ;
486
+ let data = self . data . wrapped_copy ( base) ;
484
487
let buf = ManuallyDrop :: new ( self ) ;
485
488
486
- let mut data = buf. device ( ) . to_dim ( unsafe { buf . data . shallow ( ) } ) ;
489
+ let mut data = buf. device ( ) . to_dim ( data) ;
487
490
unsafe { data. set_flag ( AllocFlag :: None ) } ;
488
491
489
492
Buffer {
0 commit comments