# HG changeset patch # User Rik # Date 1595609349 25200 # Node ID a9f1a922367b61c1b673f4f96d19a40044080fff # Parent e70c859c4bff777cb588ea42776994d62faa9360 New warning ID "Octave:infinite-loop" (bug #45143). * pt-eval.cc (visit_simple_for_command): Call warning_with_id() rather than just warning(). * warning_ids.m: Add documentation for new ID "Octave:infinite-loop". * for.tst: Enable warning ID "Octave:infinite-loop" locally for BIST tests for bug #45143. diff -r e70c859c4bff -r a9f1a922367b libinterp/parse-tree/pt-eval.cc --- a/libinterp/parse-tree/pt-eval.cc Fri Jul 24 01:01:35 2020 -0400 +++ b/libinterp/parse-tree/pt-eval.cc Fri Jul 24 09:49:09 2020 -0700 @@ -2530,8 +2530,9 @@ octave_idx_type steps = rng.numel (); if (octave::math::isinf (rng.limit ())) - warning ("FOR loop limit is infinite, will stop after %ld steps", - steps); + warning_with_id ("Octave:infinite-loop", + "FOR loop limit is infinite, will stop after %ld steps", + steps); for (octave_idx_type i = 0; i < steps; i++) { diff -r e70c859c4bff -r a9f1a922367b scripts/help/warning_ids.m --- a/scripts/help/warning_ids.m Fri Jul 24 01:01:35 2020 -0400 +++ b/scripts/help/warning_ids.m Fri Jul 24 09:49:09 2020 -0700 @@ -230,6 +230,12 @@ ## printed for implicit conversions of complex numbers to real numbers. ## By default, the @code{Octave:imag-to-real} warning is disabled. ## +## @item Octave:infinite-loop +## If the @code{Octave:infinite-loop} warning is enabled, a warning is +## printed when an infinite loop is detected such as @code{for i = 1:Inf} or +## @code{while (1)}. +## By default, the @code{Octave:infinite-loop} warning is enabled. +## ## @item Octave:language-extension ## Print warnings when using features that are unique to the Octave ## language and that may still be missing in @sc{matlab}. diff -r e70c859c4bff -r a9f1a922367b test/for.tst --- a/test/for.tst Fri Jul 24 01:01:35 2020 -0400 +++ b/test/for.tst Fri Jul 24 09:49:09 2020 -0700 @@ -162,19 +162,44 @@ %! assert (cnt, 0); %! assert (k, cell (0,3)); -%!test <45143> +%!test <*45143> +%! warning ("on", "Octave:infinite-loop", "local"); %! fail ("for i = 0:inf; break; end", "warning", %! "FOR loop limit is infinite"); %! %! fail ("for i = 0:-1:-inf; break; end", "warning", %! "FOR loop limit is infinite"); -%!test <45143> -%! k = 0; for i = 1:inf; if (++k > 10); break; end; end +%!test <*45143> +%! warning ("on", "Octave:infinite-loop", "local"); +%! k = 0; +%! for i = 1:Inf +%! if (++k > 10) +%! break; +%! endif +%! endfor %! assert (i, 11); -%! k = 0; for i = -1:-1:-inf; if (++k > 10); break; end; end +%! +%! k = 0; +%! for i = -1:-1:-Inf +%! if (++k > 10) +%! break; +%! endif +%! endfor %! assert (i, -11); -%! k = 0; for i = 1:-inf; if (++k > 10); break; end; end -%! assert (i, zeros(1,0)); -%! k = 0; for i = 0:-1:inf; if (++k > 10); break; end; end -%! assert (i, zeros(1,0)); +%! +%! k = 0; +%! for i = 1:-Inf +%! if (++k > 10) +%! break; +%! endif +%! endfor +%! assert (i, zeros (1,0)); +%! +%! k = 0; +%! for i = 0:-1:Inf +%! if (++k > 10) +%! break; +%! endif +%! endfor +%! assert (i, zeros (1,0));