@@ -696,41 +696,43 @@ int GpuArray_reshape_inplace(GpuArray *a, unsigned int nd,
696696 if (newstrides == NULL )
697697 return error_sys (ctx -> err , "calloc" );
698698
699- while (ni < nd && oi < a -> nd ) {
700- np = newdims [ni ];
701- op = a -> dimensions [oi ];
699+ if (newsize != 0 ) {
700+ while (ni < nd && oi < a -> nd ) {
701+ np = newdims [ni ];
702+ op = a -> dimensions [oi ];
703+
704+ while (np != op ) {
705+ if (np < op ) {
706+ np *= newdims [nj ++ ];
707+ } else {
708+ op *= a -> dimensions [oj ++ ];
709+ }
710+ }
702711
703- while (np != op ) {
704- if (np < op ) {
705- np *= newdims [nj ++ ];
706- } else {
707- op *= a -> dimensions [oj ++ ];
712+ for (ok = oi ; ok < oj - 1 ; ok ++ ) {
713+ if (ord == GA_F_ORDER ) {
714+ if (a -> strides [ok + 1 ] != (ssize_t )a -> dimensions [ok ]* a -> strides [ok ])
715+ goto need_copy ;
716+ } else {
717+ if (a -> strides [ok ] != (ssize_t )a -> dimensions [ok + 1 ]* a -> strides [ok + 1 ])
718+ goto need_copy ;
719+ }
708720 }
709- }
710721
711- for (ok = oi ; ok < oj - 1 ; ok ++ ) {
712722 if (ord == GA_F_ORDER ) {
713- if (a -> strides [ok + 1 ] != (ssize_t )a -> dimensions [ok ]* a -> strides [ok ])
714- goto need_copy ;
723+ newstrides [ni ] = a -> strides [oi ];
724+ for (nk = ni + 1 ; nk < nj ; nk ++ ) {
725+ newstrides [nk ] = newstrides [nk - 1 ]* newdims [nk - 1 ];
726+ }
715727 } else {
716- if (a -> strides [ok ] != (ssize_t )a -> dimensions [ok + 1 ]* a -> strides [ok + 1 ])
717- goto need_copy ;
718- }
719- }
720-
721- if (ord == GA_F_ORDER ) {
722- newstrides [ni ] = a -> strides [oi ];
723- for (nk = ni + 1 ; nk < nj ; nk ++ ) {
724- newstrides [nk ] = newstrides [nk - 1 ]* newdims [nk - 1 ];
725- }
726- } else {
727- newstrides [nj - 1 ] = a -> strides [oj - 1 ];
728- for (nk = nj - 1 ; nk > ni ; nk -- ) {
729- newstrides [nk - 1 ] = newstrides [nk ]* newdims [nk ];
728+ newstrides [nj - 1 ] = a -> strides [oj - 1 ];
729+ for (nk = nj - 1 ; nk > ni ; nk -- ) {
730+ newstrides [nk - 1 ] = newstrides [nk ]* newdims [nk ];
731+ }
730732 }
733+ ni = nj ++ ;
734+ oi = oj ++ ;
731735 }
732- ni = nj ++ ;
733- oi = oj ++ ;
734736 }
735737
736738 /* Fixup trailing ones */
0 commit comments