Mercurial > octave
diff libinterp/octave-value/ov.cc @ 21990:efce657ceb86
Provide a warning when an array is used in an if/while/until (bug #43098).
* errwarn.{cc,h} (warn_array_as_logical,
reset_first_array_as_logical_since_keyboard): New functions
* error.cc (initialize_default_warning_state):
Disable Octave:array-as-logical by default
* warning_ids.m: Add new warning Octave:array-as-logical.
* input.cc (interactive_input):
Reset first_array_as_logical_since_keyboard.
* ov-base-mat.cc (octave_base_matrix<MT>::is_true):
Call warn_array_as_logical if > 1x1.
* ov-base-diag.cc (octave_base_diag<DMT, MT>::is_true):
Call warn_array_as_logical if > 1x1. Optimise calculation.
* ov-perm.cc (octave_perm_matrix::do_index_op):
Call warn_array_as_logical if > 1x1. Optimise calculation.
* ov-range.cc (octave_range::is_true):
Call warn_array_as_logical if > 1x1. Optimise calculation.
* ov-base-sparse (octave_base_sparse<T>::is_true)
Call warn_array_as_logical if > 1x1. Check for NaN/NA.
* Sparse.cc (Sparse<T>::SparseRep::any_element_is_nan): New function.
* Sparse.h (Sparse<T>::SparseRep::any_element_is_nan,
Sparse<T>::any_element_is_nan): New functions.
* Sparse-b.cc (Sparse<bool>::SparseRep::any_element_is_nan):
New function, specialization of the above.
* if.tst: New built-in self tests.
author | Lachlan Andrew <lachlanbis@gmail.com> |
---|---|
date | Wed, 29 Jun 2016 08:50:09 -0700 |
parents | 112b20240c87 |
children | e43d83253e28 |
line wrap: on
line diff
--- a/libinterp/octave-value/ov.cc Tue Jun 28 16:42:15 2016 -0400 +++ b/libinterp/octave-value/ov.cc Wed Jun 29 08:50:09 2016 -0700 @@ -1411,7 +1411,17 @@ // Empty array also means a match. if (tmp.is_defined ()) - retval = tmp.is_true () || tmp.is_empty (); + { + if (tmp.is_empty ()) + retval = true; + else + { + // Reshape into a vector and call all() explicitly, + // to avoid Octave:array-as-logical warning. + tmp = tmp.reshape (dim_vector (tmp.numel (), 1)); + retval = tmp.all ().is_true (); + } + } } return retval;