# HG changeset patch # User John W. Eaton # Date 1549900863 0 # Mon Feb 11 16:01:03 2019 +0000 # Node ID fa27db008419dbd98cf0d2f5ee8dc84d7631632c # Parent b3ba2487dc7e383535619d212186ae3f47742e36 don't skip loop iterations if number of rows of loop array is zero (bug #55622) * pt-eval.cc (tree_evaluator::visit_simple_for_command): Don't skip loop iterations if number of rows of loop matrix is zero. Always loop over number of columns in the re-dimensioned array. If the number of steps is zero, set the loop variable to the value of the re-dimensioned array. * test/for.tst: Update tests. New tests. diff --git a/libinterp/parse-tree/pt-eval.cc b/libinterp/parse-tree/pt-eval.cc --- a/libinterp/parse-tree/pt-eval.cc +++ b/libinterp/parse-tree/pt-eval.cc @@ -1567,7 +1567,7 @@ namespace octave if (rhs.ndims () > 2) arg = arg.reshape (dv); - if (nrows > 0 && steps > 0) + if (steps > 0) { octave_value_list idx; octave_idx_type iidx; diff --git a/test/for.tst b/test/for.tst --- a/test/for.tst +++ b/test/for.tst @@ -123,13 +123,13 @@ %! __printf_assert__ ("\n"); %! assert (__prog_output_assert__ ("1234")); -%!test <50893> +%!test <55622> %! cnt = 0; %! for k = zeros (0,3); %! cnt++; %! endfor -%! assert (cnt, 0); -%! assert (k, zeros (0,3)); +%! assert (cnt, 3); +%! assert (k, zeros (0,1)); %!test <50893> %! cnt = 0; @@ -147,10 +147,26 @@ %! assert (cnt, 0); %! assert (k, zeros (3,0, "uint32")); -%!test <50893> +%!test <55622> %! cnt = 0; %! for k = cell (0,3); %! cnt++; %! endfor +%! assert (cnt, 3); +%! assert (k, cell (0,1)); + +%!test <55622> +%! cnt = 0; +%! for k = zeros (1,2,3); +%! cnt++; +%! endfor +%! assert (cnt, 6); +%! assert (k, 0); + +%!test <55622> +%! cnt = 0; +%! for k = zeros (1,2,0); +%! cnt++; +%! endfor %! assert (cnt, 0); -%! assert (k, cell (0,3)); +%! assert (k, zeros (1,0));