changeset 30861:1be26e9c07e3

maint: Merge stable to default.
author Markus Mützel <markus.muetzel@gmx.de>
date Tue, 22 Mar 2022 18:03:39 +0100
parents eba0a86471b9 (current diff) aaf689533e7b (diff)
children 820466e45a93
files libinterp/octave-value/ov.cc
diffstat 2 files changed, 9 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/octave-value/ov.cc	Tue Mar 22 00:06:09 2022 -0400
+++ b/libinterp/octave-value/ov.cc	Tue Mar 22 18:03:39 2022 +0100
@@ -3255,6 +3255,11 @@
 
     UT unsigned_increment = range_increment<T> (increment);
 
+    // If the increment wasn't zero before but it is now, the cast to UT
+    // wrapped around. The range can only have one value.
+    if (unsigned_increment == 0)
+      return 1;
+
     return range_numel_aux (base, unsigned_increment, limit);
   }
 
--- a/test/range.tst	Tue Mar 22 00:06:09 2022 -0400
+++ b/test/range.tst	Tue Mar 22 18:03:39 2022 +0100
@@ -613,9 +613,8 @@
 %! for i_type = 1:numel (types)
 %!   assert (intmin (types{i_type}) : -double (intmin (types{i_type})) : intmax (types{i_type}), ...
 %!           [intmin(types{i_type}), 0]);
-%!   ## FIXME: This test leads to a deadlock for "int64".
-%!   ## assert (intmin (types{i_type}) : -2*double (intmin (types{i_type})) : intmax (types{i_type}), ...
-%!   ##         intmin (types{i_type}));
+%!   assert (intmin (types{i_type}) : -2*double (intmin (types{i_type})) : intmax (types{i_type}), ...
+%!           intmin (types{i_type}));
 %!   if (! strcmp (types, "int64"))
 %!     ## The increment cannot be represented in double precision for "int64"
 %!     assert (intmin (types{i_type}) : 2*double (intmax (types{i_type})) : intmin (types{i_type}), ...
@@ -627,9 +626,8 @@
 %! for i_type = 1:numel (types)
 %!   assert (intmax (types{i_type}) : double (intmin (types{i_type})) : intmin (types{i_type}), ...
 %!           [intmax(types{i_type}), -1]);
-%!   ## FIXME: This test leads to a deadlock for "int64".
-%!   ## assert (intmax (types{i_type}) : 2*double (intmin (types{i_type})) : intmin (types{i_type}), ...
-%!   ##         intmax (types{i_type}));
+%!   assert (intmax (types{i_type}) : 2*double (intmin (types{i_type})) : intmin (types{i_type}), ...
+%!           intmax (types{i_type}));
 %!   if (! strcmp (types, "int64"))
 %!     ## The increment cannot be represented in double precision for "int64"
 %!     assert (intmax (types{i_type}) : -2*double (intmax (types{i_type})) : intmin (types{i_type}), ...