# HG changeset patch # User John W. Eaton # Date 1549900863 0 # Mon Feb 11 16:01:03 2019 +0000 # Node ID fe7eb6c55107d04d8bcfdfaf093f46ad96822ebc # Parent 2ee2ee9b76fa9f5b70ab1bc6e28e9b39c28a4eb5 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 -r 2ee2ee9b76fa -r fe7eb6c55107 libinterp/parse-tree/pt-eval.cc --- a/libinterp/parse-tree/pt-eval.cc Sat Feb 03 11:04:44 2024 +0800 +++ b/libinterp/parse-tree/pt-eval.cc Mon Feb 11 16:01:03 2019 +0000 @@ -3221,7 +3221,7 @@ 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 -r 2ee2ee9b76fa -r fe7eb6c55107 test/for.tst --- a/test/for.tst Sat Feb 03 11:04:44 2024 +0800 +++ b/test/for.tst Mon Feb 11 16:01:03 2019 +0000 @@ -130,15 +130,15 @@ %! __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> +%!test <*55622> %! cnt = 0; %! for k = zeros (3,0) %! cnt++; @@ -159,8 +159,24 @@ %! 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)); %!test <*45143> %! warning ("on", "Octave:infinite-loop", "local");