Skip to content

Commit 9aaca8b

Browse files
committed
.broadcast(): Work around miscompile
This produced the wrong result for 1 -> (16, 16) and 16 -> (16, 16) broadcasts in release mode.
1 parent 4710e97 commit 9aaca8b

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

src/impl_methods.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -896,10 +896,9 @@ impl<A, S, D> ArrayBase<S, D> where S: Data<Elem=A>, D: Dimension
896896
}
897897

898898
{
899-
let mut new_stride_iter = new_stride.slice_mut().iter_mut().rev();
900899
for ((er, es), dr) in from.slice().iter().rev()
901900
.zip(stride.slice().iter().rev())
902-
.zip(new_stride_iter.by_ref())
901+
.zip(new_stride.slice_mut().iter_mut().rev())
903902
{
904903
/* update strides */
905904
if *dr == *er {
@@ -914,7 +913,8 @@ impl<A, S, D> ArrayBase<S, D> where S: Data<Elem=A>, D: Dimension
914913
}
915914

916915
/* set remaining strides to zero */
917-
for dr in new_stride_iter {
916+
let tail_len = to.ndim() - from.ndim();
917+
for dr in &mut new_stride.slice_mut()[..tail_len] {
918918
*dr = 0;
919919
}
920920
}

0 commit comments

Comments
 (0)