bugGNU Octave - Bugs: bug #66795, UBSAN errors while running the...

 
 

bug #66795: UBSAN errors while running the test suite

Submitter:  Markus Mützel <mmuetzel>
Submitted:  Fri 14 Feb 2025 03:08:02 PM UTC
   
 
Category:  Interpreter Severity:  3 - Normal
Priority:  5 - Normal Item Group:  Segfault, Bus Error, etc.
Status:  In Progress Assigned to:  None
Originator Name:  Open/Closed:  * Open
Release:  * 10.0.90 Release: 
Operating System:  * GNU/Linux Fixed Release:  None
Planned Release:  10.1.0 (current stable)
* Mandatory Fields

Add a New Comment Rich Markup
   

Jump to the original submission

Tue 18 Mar 2025 02:45:17 PM UTC, comment #20: 


> But, it would be nice to figure out how this code is being activated because there are other paths, such as using char(), which are already properly checking for NaN.


I re-ran the remaining tests at hg id cbf34a677b5b with `UBSAN_OPTIONS="print_stacktrack=1"`. (I manually shortened the path to the build directory in the stacktraces to reduce the bloat only so slightly...)

The following potentially doesn't require any change:

octave:1> test tensorprod
../liboctave/array/idx-vector.cc:232:53: runtime error: nan is outside the range of representable values of type 'long'
    #0 0x7eaade91295f in octave::convert_index(double, long&) .../.build-ubsan/../liboctave/array/idx-vector.cc:232:53
    #1 0x7eaade913675 in octave::idx_vector::idx_scalar_rep::idx_scalar_rep<double>(double) .../.build-ubsan/../liboctave/array/idx-vector.cc:261:12
    #2 0x7eaae4b5cb87 in octave::idx_vector::idx_vector(double) .../.build-ubsan/../liboctave/array/idx-vector.h:474:38
    #3 0x7eaae4b594ef in octave_scalar::index_vector(bool) const .../.build-ubsan/../libinterp/octave-value/ov-scalar.h:81:12
    #4 0x7eaae411cd25 in octave_value::index_vector(bool) const .../.build-ubsan/../libinterp/octave-value/ov.h:536:19
    #5 0x7eaae6098adc in octave::Fisindex(octave::interpreter&, octave_value_list const&, int) .../.build-ubsan/../libinterp/corefcn/utils.cc:1680:32
    #6 0x7eaae4e9e944 in octave::tree_evaluator::execute_builtin_function(octave_builtin&, int, octave_value_list const&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3556:16
    #7 0x7eaae4999b19 in octave_builtin::execute(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-builtin.cc:49:13
    #8 0x7eaae4a9acaf in octave_function::call(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-fcn.cc:74:10
    #9 0x7eaae4f05eca in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.cc:470:33
    #10 0x7eaae4f10289 in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.h:105:32
    #11 0x7eaae4f73b1b in octave::tree_prefix_expression::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-unop.cc:80:39
    #12 0x7eaae4ea4627 in octave::tree_evaluator::is_logically_true(octave::tree_expression*, char const*) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4674:27
    #13 0x7eaae4e66ed5 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3917:37
    #14 0x7eaae4ee4756 in octave::tree_if_command_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:139:8
    #15 0x7eaae4e66482 in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3900:10
    #16 0x7eaae4f38d56 in octave::tree_if_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:168:8
    #17 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #18 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #19 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #20 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #21 0x7eaae4e67037 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3922:23
    #22 0x7eaae4ee4756 in octave::tree_if_command_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:139:8
    #23 0x7eaae4e66482 in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3900:10
    #24 0x7eaae4f38d56 in octave::tree_if_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:168:8
    #25 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #26 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #27 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #28 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #29 0x7eaae4e67037 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3922:23
    #30 0x7eaae4ee4756 in octave::tree_if_command_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:139:8
    #31 0x7eaae4e66482 in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3900:10
    #32 0x7eaae4f38d56 in octave::tree_if_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:168:8
    #33 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #34 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #35 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #36 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #37 0x7eaae4ea2189 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3800:19
    #38 0x7eaae4ba1e59 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:569:13
    #39 0x7eaae4ba1cb6 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:562:10
    #40 0x7eaae4f05eca in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.cc:470:33
    #41 0x7eaae4f10289 in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.h:105:32
    #42 0x7eaae4e69e99 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4074:47
    #43 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #44 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #45 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #46 0x7eaae4ea2189 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3800:19
    #47 0x7eaae4ba1e59 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:569:13
    #48 0x7eaae4ba1cb6 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:562:10
    #49 0x7eaae4f05eca in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.cc:470:33
    #50 0x7eaae4e7a5e4 in octave::tree_evaluator::eval_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, bool, int&, int) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:1068:34
    #51 0x7eaae4e7c086 in octave::tree_evaluator::eval(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, int) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:1130:10
    #52 0x7eaae5a9d472 in octave::interpreter::eval(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, int) .../.build-ubsan/../libinterp/corefcn/interpreter.cc:1520:22
    #53 0x7eaae4db8b90 in octave::Feval(octave::interpreter&, octave_value_list const&, int) .../.build-ubsan/../libinterp/parse-tree/oct-parse.yy:5969:19
    #54 0x7eaae4e9e944 in octave::tree_evaluator::execute_builtin_function(octave_builtin&, int, octave_value_list const&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3556:16
    #55 0x7eaae4999b19 in octave_builtin::execute(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-builtin.cc:49:13
    #56 0x7eaae4a9acaf in octave_function::call(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-fcn.cc:74:10
    #57 0x7eaae4f05eca in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.cc:470:33
    #58 0x7eaae4f10289 in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.h:105:32
    #59 0x7eaae4e69e99 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4074:47
    #60 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #61 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #62 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #63 0x7eaae4e6b787 in octave::tree_evaluator::visit_try_catch_command(octave::tree_try_catch_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4274:21
    #64 0x7eaae4efb636 in octave::tree_try_catch_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-except.h:65:8
    #65 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #66 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #67 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #68 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #69 0x7eaae4e67037 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3922:23
    #70 0x7eaae4ee4756 in octave::tree_if_command_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:139:8
    #71 0x7eaae4e66482 in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3900:10
    #72 0x7eaae4f38d56 in octave::tree_if_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:168:8
    #73 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #74 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #75 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #76 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #77 0x7eaae4e67037 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3922:23
    #78 0x7eaae4ee4756 in octave::tree_if_command_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:139:8
    #79 0x7eaae4e66482 in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3900:10
    #80 0x7eaae4f38d56 in octave::tree_if_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:168:8
    #81 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #82 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #83 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #84 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #85 0x7eaae4e6c991 in octave::tree_evaluator::visit_unwind_protect_command(octave::tree_unwind_protect_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4419:32
    #86 0x7eaae4efb906 in octave::tree_unwind_protect_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-except.h:109:8
    #87 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #88 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #89 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #90 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #91 0x7eaae4ed4d61 in void octave::tree_evaluator::execute_range_loop<double>(octave::range<double, void> const&, int, octave::octave_lvalue&, octave::tree_statement_list*) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3215:20
    #92 0x7eaae4e63990 in octave::tree_evaluator::visit_simple_for_command(octave::tree_simple_for_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3262:11
    #93 0x7eaae4f1bee6 in octave::tree_simple_for_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-loop.h:154:8
    #94 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #95 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #96 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #97 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #98 0x7eaae4ea2189 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3800:19
    #99 0x7eaae4ba1e59 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:569:13
    #100 0x7eaae4ba1cb6 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:562:10
    #101 0x7eaae4f05eca in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.cc:470:33
    #102 0x7eaae4f10289 in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.h:105:32
    #103 0x7eaae4e69e99 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4074:47
    #104 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #105 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #106 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #107 0x7eaae4e73ea4 in octave::tree_evaluator::eval(std::shared_ptr<octave::tree_statement_list>&, bool) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:1000:18
    #108 0x7eaae4e7710c in octave::tree_evaluator::repl() .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:817:19
    #109 0x7eaae5a99b1d in octave::interpreter::main_loop() .../.build-ubsan/../libinterp/corefcn/interpreter.cc:1336:22
    #110 0x7eaae5a9735a in octave::interpreter::execute() .../.build-ubsan/../libinterp/corefcn/interpreter.cc:896:27
    #111 0x7eaae942d42a in octave::interpreter_qobject::execute() .../.build-ubsan/../libgui/src/interpreter-qobject.cc:88:32
    #112 0x7eaae95fc38b in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (octave::interpreter_qobject::*)()>::call(void (octave::interpreter_qobject::*)(), octave::interpreter_qobject*, void**) /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:145:13
    #113 0x7eaae95fc1b4 in void QtPrivate::FunctionPointer<void (octave::interpreter_qobject::*)()>::call<QtPrivate::List<>, void>(void (octave::interpreter_qobject::*)(), octave::interpreter_qobject*, void**) /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:182:13
    #114 0x7eaae95fbf8a in QtPrivate::QCallableObject<void (octave::interpreter_qobject::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:520:21
    #115 0x7eaad97a39f0 in QObject::event(QEvent*) /usr/src/qt6-base-6.6.2+dfsg-12/src/corelib/kernel/qobject.cpp:1437:31
    #116 0x7eaada59325f in QApplicationPrivate::notify_helper(QObject*, QEvent*) /usr/src/qt6-base-6.6.2+dfsg-12/src/widgets/kernel/qapplication.cpp:3296:31
    #117 0x7eaae95d78d8 in octave::octave_qapplication::notify(QObject*, QEvent*) .../.build-ubsan/../libgui/src/octave-qobject.cc:151:28
    #118 0x7eaad9766717 in QCoreApplication::notifyInternal2(QObject*, QEvent*) /usr/src/qt6-base-6.6.2+dfsg-12/src/corelib/kernel/qcoreapplication.cpp:1121:24
    #119 0x7eaad9766914 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) /usr/src/qt6-base-6.6.2+dfsg-12/src/corelib/kernel/qcoreapplication.cpp:1901:36
    #120 0x7eaad9974bae in postEventSourceDispatch /usr/src/qt6-base-6.6.2+dfsg-12/src/corelib/kernel/qeventdispatcher_glib.cpp:243:39
    #121 0x7eaad4d10396 in g_main_dispatch /usr/src/glib2.0-2.82.1-0ubuntu1/debian/build/deb/../../../glib/gmain.c:3357:28
    #122 0x7eaad4d70dc6 in g_main_context_dispatch_unlocked /usr/src/glib2.0-2.82.1-0ubuntu1/debian/build/deb/../../../glib/gmain.c:4208:7
    #123 0x7eaad4d70dc6 in g_main_context_iterate_unlocked.isra.0 /usr/src/glib2.0-2.82.1-0ubuntu1/debian/build/deb/../../../glib/gmain.c:4273:5
    #124 0x7eaad4d0f8b2 in g_main_context_iteration /usr/src/glib2.0-2.82.1-0ubuntu1/debian/build/deb/../../../glib/gmain.c:4338:12
    #125 0x7eaad9973252 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) /usr/src/qt6-base-6.6.2+dfsg-12/src/corelib/kernel/qeventdispatcher_glib.cpp:393:43
    #126 0x7eaad9770b5a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) /usr/src/qt6-base-6.6.2+dfsg-12/src/corelib/kernel/qeventloop.cpp:182:22
    #127 0x7eaad983756a in QThread::exec() /usr/src/qt6-base-6.6.2+dfsg-12/src/corelib/thread/qthread.cpp:578:36
    #128 0x7eaad98b5833 in operator() /usr/src/qt6-base-6.6.2+dfsg-12/src/corelib/thread/qthread_unix.cpp:324:17
    #129 0x7eaad98b5833 in terminate_on_exception<QThreadPrivate::start(void*)::<lambda()> > /usr/src/qt6-base-6.6.2+dfsg-12/src/corelib/thread/qthread_unix.cpp:260:27
    #130 0x7eaad98b5833 in QThreadPrivate::start(void*) /usr/src/qt6-base-6.6.2+dfsg-12/src/corelib/thread/qthread_unix.cpp:283:27
    #131 0x7eaadaea1e2d in start_thread nptl/pthread_create.c:447:8
    #132 0x7eaadaf33a4b in __GI___clone3 misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:78

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../liboctave/array/idx-vector.cc:232:53
PASSES 126 out of 126 tests


The other two might require some changes still. I haven't looked into where and if a potential change makes sense.

octave:2> test movfun
../libinterp/octave-value/ov-re-mat.cc:228:42: runtime error: nan is outside the range of representable values of type 'char'
    #0 0x7eaae4b41ac8 in octave_matrix::char_array_value(bool) const .../.build-ubsan/../libinterp/octave-value/ov-re-mat.cc:228:42
    #1 0x7eaae419e6f5 in octave_value::char_array_value(bool) const .../.build-ubsan/../libinterp/octave-value/ov.h:907:19
    #2 0x7eaae4f72a53 in charNDArray octave_value_extract<charNDArray>(octave_value const&) .../.build-ubsan/../libinterp/octave-value/ov.h:1755:1
    #3 0x7eaae4f726f6 in void octave::tm_const::array_concat_internal<charNDArray>(charNDArray&) const .../.build-ubsan/../libinterp/parse-tree/pt-tm-const.cc:601:21
    #4 0x7eaae4f43cb5 in octave::tm_const::char_array_concat(char) const .../.build-ubsan/../libinterp/parse-tree/pt-tm-const.cc:442:3
    #5 0x7eaae4f42407 in octave::tm_const::concat(char) const .../.build-ubsan/../libinterp/parse-tree/pt-tm-const.cc:271:14
    #6 0x7eaae4f1c771 in octave::tree_matrix::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-mat.cc:59:14
    #7 0x7eaae4e3bb73 in octave::tree_simple_assignment::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-assign.cc:97:41
    #8 0x7eaae4e69e99 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4074:47
    #9 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #10 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #11 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #12 0x7eaae4e67037 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3922:23
    #13 0x7eaae4ee4756 in octave::tree_if_command_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:139:8
    #14 0x7eaae4e66482 in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3900:10
    #15 0x7eaae4f38d56 in octave::tree_if_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:168:8
    #16 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #17 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #18 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #19 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #20 0x7eaae4e67037 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3922:23
    #21 0x7eaae4ee4756 in octave::tree_if_command_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:139:8
    #22 0x7eaae4e66482 in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3900:10
    #23 0x7eaae4f38d56 in octave::tree_if_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:168:8
    #24 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #25 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #26 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #27 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #28 0x7eaae4ea2189 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3800:19
    #29 0x7eaae4ba1e59 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:569:13
    #30 0x7eaae4ba1cb6 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:562:10
    #31 0x7eaae5a9dac0 in octave::interpreter::feval(octave_function*, octave_value_list const&, int) .../.build-ubsan/../libinterp/corefcn/interpreter.cc:1586:17
    #32 0x7eaae5a9dca5 in octave::interpreter::feval(octave_value const&, octave_value_list const&, int) .../.build-ubsan/../libinterp/corefcn/interpreter.cc:1607:14
    #33 0x7eaae4a5ac42 in octave::scoped_fcn_handle::call(int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-fcn-handle.cc:1508:17
    #34 0x7eaae4a6f40f in octave::base_fcn_handle::subsref(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::__cxx11::list<octave_value_list, std::allocator<octave_value_list>> const&, int) .../.build-ubsan/../libinterp/octave-value/ov-fcn-handle.cc:819:18
    #35 0x7eaae4a83838 in octave_fcn_handle::subsref(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::__cxx11::list<octave_value_list, std::allocator<octave_value_list>> const&, int) .../.build-ubsan/../libinterp/octave-value/ov-fcn-handle.h:270:19
    #36 0x7eaae4bd147c in octave_value::subsref(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::__cxx11::list<octave_value_list, std::allocator<octave_value_list>> const&, int) .../.build-ubsan/../libinterp/octave-value/ov.cc:1459:17
    #37 0x7eaae4f07c57 in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.cc:654:38
    #38 0x7eaae4f10289 in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.h:105:32
    #39 0x7eaae4e3bb73 in octave::tree_simple_assignment::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-assign.cc:97:41
    #40 0x7eaae4e69e99 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4074:47
    #41 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #42 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #43 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #44 0x7eaae4e67037 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3922:23
    #45 0x7eaae4ee4756 in octave::tree_if_command_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:139:8
    #46 0x7eaae4e66482 in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3900:10
    #47 0x7eaae4f38d56 in octave::tree_if_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:168:8
    #48 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #49 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #50 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #51 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #52 0x7eaae4e67037 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3922:23
    #53 0x7eaae4ee4756 in octave::tree_if_command_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:139:8
    #54 0x7eaae4e66482 in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3900:10
    #55 0x7eaae4f38d56 in octave::tree_if_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:168:8
    #56 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #57 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #58 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #59 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #60 0x7eaae4ea2189 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3800:19
    #61 0x7eaae4ba1e59 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:569:13
    #62 0x7eaae4ba1cb6 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:562:10
    #63 0x7eaae4f05eca in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.cc:470:33
    #64 0x7eaae4f10289 in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.h:105:32
    #65 0x7eaae4e3bb73 in octave::tree_simple_assignment::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-assign.cc:97:41
    #66 0x7eaae4e69e99 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4074:47
    #67 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #68 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #69 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #70 0x7eaae4e63bbb in octave::tree_evaluator::visit_simple_for_command(octave::tree_simple_for_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3277:20
    #71 0x7eaae4f1bee6 in octave::tree_simple_for_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-loop.h:154:8
    #72 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #73 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #74 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #75 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #76 0x7eaae4ea2189 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3800:19
    #77 0x7eaae4ba1e59 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:569:13
    #78 0x7eaae4ba1cb6 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:562:10
    #79 0x7eaae4f05eca in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.cc:470:33
    #80 0x7eaae4f10289 in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.h:105:32
    #81 0x7eaae4e92e0c in octave::tree_evaluator::convert_to_const_vector(octave::tree_argument_list*) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:2370:31
    #82 0x7eaae4f05aa3 in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.cc:450:31
    #83 0x7eaae4f10289 in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.h:105:32
    #84 0x7eaae4e92e0c in octave::tree_evaluator::convert_to_const_vector(octave::tree_argument_list*) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:2370:31
    #85 0x7eaae4f05aa3 in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.cc:450:31
    #86 0x7eaae4f10289 in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.h:105:32
    #87 0x7eaae4e69e99 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4074:47
    #88 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #89 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #90 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #91 0x7eaae4e6c991 in octave::tree_evaluator::visit_unwind_protect_command(octave::tree_unwind_protect_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4419:32
    #92 0x7eaae4efb906 in octave::tree_unwind_protect_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-except.h:109:8
    #93 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #94 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #95 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #96 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #97 0x7eaae4ea2189 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3800:19
    #98 0x7eaae4ba1e59 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:569:13
    #99 0x7eaae4ba1cb6 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:562:10
    #100 0x7eaae4f05eca in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.cc:470:33
    #101 0x7eaae4e7a5e4 in octave::tree_evaluator::eval_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, bool, int&, int) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:1068:34
    #102 0x7eaae4e7c086 in octave::tree_evaluator::eval(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, int) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:1130:10
    #103 0x7eaae5a9d472 in octave::interpreter::eval(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, int) .../.build-ubsan/../libinterp/corefcn/interpreter.cc:1520:22
    #104 0x7eaae4db8b90 in octave::Feval(octave::interpreter&, octave_value_list const&, int) .../.build-ubsan/../libinterp/parse-tree/oct-parse.yy:5969:19
    #105 0x7eaae4e9e944 in octave::tree_evaluator::execute_builtin_function(octave_builtin&, int, octave_value_list const&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3556:16
    #106 0x7eaae4999b19 in octave_builtin::execute(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-builtin.cc:49:13
    #107 0x7eaae4a9acaf in octave_function::call(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-fcn.cc:74:10
    #108 0x7eaae4f05eca in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.cc:470:33
    #109 0x7eaae4f10289 in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.h:105:32
    #110 0x7eaae4e69e99 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4074:47
    #111 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #112 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #113 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #114 0x7eaae4e6b787 in octave::tree_evaluator::visit_try_catch_command(octave::tree_try_catch_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4274:21
    #115 0x7eaae4efb636 in octave::tree_try_catch_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-except.h:65:8
    #116 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #117 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #118 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #119 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #120 0x7eaae4e67037 in octave::tree_evaluator::visit_if_command_list(octave::tree_if_command_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3922:23
    #121 0x7eaae4ee4756 in octave::tree_if_command_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:139:8
    #122 0x7eaae4e66482 in octave::tree_evaluator::visit_if_command(octave::tree_if_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3900:10
    #123 0x7eaae4f38d56 in octave::tree_if_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-select.h:168:8
    #124 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #125 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #126 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #127 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #128 0x7eaae4e6c991 in octave::tree_evaluator::visit_unwind_protect_command(octave::tree_unwind_protect_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4419:32
    #129 0x7eaae4efb906 in octave::tree_unwind_protect_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-except.h:109:8
    #130 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #131 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #132 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #133 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #134 0x7eaae4ed4d61 in void octave::tree_evaluator::execute_range_loop<double>(octave::range<double, void> const&, int, octave::octave_lvalue&, octave::tree_statement_list*) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3215:20
    #135 0x7eaae4e63990 in octave::tree_evaluator::visit_simple_for_command(octave::tree_simple_for_command&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3262:11
    #136 0x7eaae4f1bee6 in octave::tree_simple_for_command::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-loop.h:154:8
    #137 0x7eaae4e69874 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4049:20
    #138 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #139 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #140 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #141 0x7eaae4ea2189 in octave::tree_evaluator::execute_user_function(octave_user_function&, int, octave_value_list const&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:3800:19
    #142 0x7eaae4ba1e59 in octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:569:13
    #143 0x7eaae4ba1cb6 in octave_user_function::call(octave::tree_evaluator&, int, octave_value_list const&) .../.build-ubsan/../libinterp/octave-value/ov-usr-fcn.cc:562:10
    #144 0x7eaae4f05eca in octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.cc:470:33
    #145 0x7eaae4f10289 in octave::tree_index_expression::evaluate(octave::tree_evaluator&, int) .../.build-ubsan/../libinterp/parse-tree/pt-idx.h:105:32
    #146 0x7eaae4e69e99 in octave::tree_evaluator::visit_statement(octave::tree_statement&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4074:47
    #147 0x7eaae4f3e786 in octave::tree_statement::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:125:8
    #148 0x7eaae4e6b12c in octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:4159:16
    #149 0x7eaae46b7e36 in octave::tree_statement_list::accept(octave::tree_walker&) .../.build-ubsan/../libinterp/parse-tree/pt-stmt.h:215:8
    #150 0x7eaae4e73ea4 in octave::tree_evaluator::eval(std::shared_ptr<octave::tree_statement_list>&, bool) .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:1000:18
    #151 0x7eaae4e7710c in octave::tree_evaluator::repl() .../.build-ubsan/../libinterp/parse-tree/pt-eval.cc:817:19
    #152 0x7eaae5a99b1d in octave::interpreter::main_loop() .../.build-ubsan/../libinterp/corefcn/interpreter.cc:1336:22
    #153 0x7eaae5a9735a in octave::interpreter::execute() .../.build-ubsan/../libinterp/corefcn/interpreter.cc:896:27
    #154 0x7eaae942d42a in octave::interpreter_qobject::execute() .../.build-ubsan/../libgui/src/interpreter-qobject.cc:88:32
    #155 0x7eaae95fc38b in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (octave::interpreter_qobject::*)()>::call(void (octave::interpreter_qobject::*)(), octave::interpreter_qobject*, void**) /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:145:13
    #156 0x7eaae95fc1b4 in void QtPrivate::FunctionPointer<void (octave::interpreter_qobject::*)()>::call<QtPrivate::List<>, void>(void (octave::interpreter_qobject::*)(), octave::interpreter_qobject*, void**) /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:182:13
    #157 0x7eaae95fbf8a in QtPrivate::QCallableObject<void (octave::interpreter_qobject::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/x86_64-linux-gnu/qt6/QtCore/qobjectdefs_impl.h:520:21
    #158 0x7eaad97a39f0 in QObject::event(QEvent*) /usr/src/qt6-base-6.6.2+dfsg-12/src/corelib/kernel/qobject.cpp:1437:31
    #159 0x7eaada59325f in QApplicationPrivate::notify_helper(QObject*, QEvent*) /usr/src/qt6-base-6.6.2+dfsg-12/src/widgets/kernel/qapplication.cpp:3296:31
    #160 0x7eaae95d78d8 in octave::octave_qapplication::notify(QObject*, QEvent*) .../.build-ubsan/../libgui/src/octave-qobject.cc:151:28
    #161 0x7eaad9766717 in QCoreApplication::notifyInternal2(QObject*, QEvent*) /usr/src/qt6-base-6.6.2+dfsg-12/src/corelib/ker

Markus Mützel <mmuetzel>
Group administrator
Thu 27 Feb 2025 09:36:51 PM UTC, comment #19: 

Given the complexity, I don't think we can get fixes for failing test blocks 3 and 4 in time for Octave 10.1.  But we can leave this open to finish up this work on the development branch.

Rik <rik5>
Group administrator
Thu 27 Feb 2025 09:34:56 PM UTC, comment #18: 


comment #12:

> > But, Octave already catches non-finite values so this code will not be executed with a NaN input (UBSAN doesn't know this).
>
> Maybe that's a language issue on my end. But afaict, the UBSAN isn't a static analyzer but a runtime analyzer. So, if you see that UBSAN output it means that that part of the code was reached with a NaN value. I.e., there is no check in Octave that would have caught non-finite values in this case.
>


Oh, that is worse.  And the complaint about NaN value probably means that Inf values can also make it to this code, it's just that the test suite didn't create such a case.  Adding a test for std::isfinite() would probably work.  Given that Inf, -Inf, and NaN are specific bit patterns in IEEE notation, I would think it would be a quick test.

But, it would be nice to figure out how this code is being activated because there are other paths, such as using char(), which are already properly checking for NaN.  One solution would be to code up this path through ov-re-mat.cc with checks.  Another solution would be to have the code in ov-re-mat.cc delegate to the code that is already doing input validation.

For example, there is an explicit choice in the existing code for char() to map all out-of-range values (> 255) to 0, but to emit an error for NaN.  So std::isfinite() would result in different behavior.


Rik <rik5>
Group administrator
Wed 26 Feb 2025 12:53:58 PM UTC, comment #17: 

Regarding gnulib: That code is "upstream" to Octave. That's why I excluded that from comment #0.

If you'd like to have that changed in gnulib, consider proposing those changes at -email is unavailable- (or maybe first ask whether they consider this a bug at all).

Markus Mützel <mmuetzel>
Group administrator
Wed 26 Feb 2025 12:08:40 PM UTC, comment #16: 

WRT gnulib. I made the following changes:

$ diff -u gnulib/lib/unistr/u8-to-u16.c libgnu/unistr/u8-to-u16.c
--- gnulib/lib/unistr/u8-to-u16.c        2025-02-08 19:38:18.012938470 -0500
+++ libgnu/unistr/u8-to-u16.c        2025-02-26 06:52:02.867334614 -0500
@@ -77,7 +77,11 @@
       s += count;

       /* Store it in the output string.  */
-      count = u16_uctomb (result + length, uc, allocated - length);
+      if (result != NULL)
+        count = u16_uctomb (result + length, uc, allocated - length);
+      else
+        count = -2; /* Need for allocation */
+
       if (count == -1)
         {
           if (!(result == resultbuf || result == NULL))

and

$ diff -u gnulib/lib/unistr/u16-to-u8.c libgnu/unistr/u16-to-u8.c
--- gnulib/lib/unistr/u16-to-u8.c        2025-02-08 19:38:18.008938358 -0500
+++ libgnu/unistr/u16-to-u8.c        2025-02-26 06:50:37.392019566 -0500
@@ -77,7 +77,11 @@
       s += count;

       /* Store it in the output string.  */
-      count = u8_uctomb (result + length, uc, allocated - length);
+      if (result != NULL)
+        count = u8_uctomb (result + length, uc, allocated - length);
+      else
+        count = -2; /* Need for allocation */
+
       if (count == -1)
         {
           if (!(result == resultbuf || result == NULL))


And the gnulib warning is gone:

octave:1> test libinterp/corefcn/load-save.cc-tst
PASSES 5 out of 5 tests
octave:2> test tensorprod
../liboctave/array/idx-vector.cc:232:53: runtime error: nan is outside the range of representable values of type 'long'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../liboctave/array/idx-vector.cc:232:53
PASSES 126 out of 126 tests
octave:3> ver
----------------------------------------------------------------------
GNU Octave Version: 10.0.1 (hg id: 25fe7e289618)


Dmitri.
--


Dmitri A. Sergatskov <dasergatskov>
Wed 26 Feb 2025 11:46:52 AM UTC, comment #15: 

WRT comment 9. I was not suggesting that gnulib should "fix" rapidjson. I was saying that the errors in both cases (rapidjson and gnulib) comes from similar problem -- arithmetics on pointers with possibility of pointer being NULL.

Rapidjson fixed it.

I suspect gnulib may consider case of NULL+0 to be NULL with all sane compilers, but technically it is an undefined behavior.

Dmitri.
--

Dmitri A. Sergatskov <dasergatskov>
Wed 26 Feb 2025 11:34:14 AM UTC, comment #14: 

Similarly: what about adding std::numeric_limits to shut other warnings?

Dmitri.
--

Dmitri A. Sergatskov <dasergatskov>
Wed 26 Feb 2025 11:05:08 AM UTC, comment #13: 

May be a stupid question -- would adding isnan() check (before the cast) be a large performance hit?

Dmitri.
--

Dmitri A. Sergatskov <dasergatskov>
Wed 26 Feb 2025 07:32:55 AM UTC, comment #12: 


> But, Octave already catches non-finite values so this code will not be executed with a NaN input (UBSAN doesn't know this).


Maybe that's a language issue on my end. But afaict, the UBSAN isn't a static analyzer but a runtime analyzer. So, if you see that UBSAN output it means that that part of the code was reached with a NaN value. I.e., there is no check in Octave that would have caught non-finite values in this case.

Markus Mützel <mmuetzel>
Group administrator
Tue 25 Feb 2025 10:53:51 PM UTC, comment #11: 

The UBSAN error is again coming from a cast of double to an unsigned integer type.  I will quote a large portion of ov.cc.

+verbatim
// "Convert" unsigned range increment to unsigned.  A no-op, but
// needed to provide a consistent interface for other template
// functions.

template <typename T,
          typename UT = typename std::make_unsigned<T>::type,
          typename std::enable_if<(std::is_integral<UT>::value
                                   && std::is_unsigned<UT>::value),
                                  bool>::type = true>
UT
range_increment (UT increment)
{
  return increment;
}

// Convert double range increment to unsigned.  Enable by return type.

template <typename T,
          typename UT = typename std::make_unsigned<T>::type>
typename std::enable_if<(std::is_integral<UT>::value
                         && std::is_unsigned<UT>::value), UT>::type
range_increment (double increment)
{
  double abs_increment = std::abs (increment);

  return static_cast<UT> (abs_increment);
}
+verbatim

@jwe: you can probably tell quickly if this is a problem.  Isn't there some sort of selector which would have checked the value of increment earlier and determined which unsigned type (UT) to use?  It seems to me if the increment is greater than 65536 then Octave would not have chosen "unsigned short" to represent the increment.

Rik <rik5>
Group administrator
Tue 25 Feb 2025 10:16:08 PM UTC, comment #10: 


comment #8:

> > Except for the issue in tensorprod.m, are there any remaining UBSAN warnings to fix?
>
> There are four verbatim blocks in comment #0 that show UBSAN errors while running `make check`.
>
> So far, fixes have only been applied for the issues in the first of these verbatim blocks.
>
> I started to look at the second verbatim block. But wanted to ask whether any fix is actually necessary for that case. If I understood correctly, we probably don't need to change anything for that.


Correct.  The cast occurs, and then Octave checks if the cast was successful.  UBSAN only knows that the cast might create problems, not that we correctly validate the results.  Nothing to be done for tensorprod.m.

>
> I haven't yet looked at the root cause for the issues in the third or forth verbatim block in comment #0.


The third block is


/libinterp/octave-value/ov-re-mat.cc:228:42: runtime error: nan is outside the range of representable values of type 'char'


The code is


charNDArray
octave_matrix::char_array_value (bool) const
{
  charNDArray retval (dims ());

  octave_idx_type nel = numel ();

  for (octave_idx_type i = 0; i < nel; i++)
    retval.elem (i) = static_cast<char> (m_matrix.elem (i));

  return retval;
}


The cast is part of converting a real matrix (double) to a charNDArray.  But, Octave already catches non-finite values so this code will not be executed with a NaN input (UBSAN doesn't know this).

Here's an example:


octave:7> realmat = [double('abc'), NaN]
realmat =

    97    98    99   NaN

octave:8> chmat = char (realmat)
error: invalid conversion from NaN to character



Rik <rik5>
Group administrator
Thu 20 Feb 2025 05:15:50 PM UTC, comment #9: 

RE: Rapidjson

IIUC, the purpose of gnulib is to fix bugs in POSIX functions and to provide some other useful general-purpose tools for C-language programmers (for example, things like generic containers or other utility functions), not to attempt to fix bugs in other random software projects.

Also IIUC, the problem with Rapidjson is that they no longer make releases and some distros prefer not to create packages from arbitrary points in version control history.  Maybe that's an issue to take up with the distro managers?

I would also prefer to avoid having Octave's build system attempt to automatically download and use an updated version of the Rapidjson sources.

John W. Eaton <jwe>
Group administrator
Thu 20 Feb 2025 04:45:50 PM UTC, comment #8: 


> Except for the issue in tensorprod.m, are there any remaining UBSAN warnings to fix?


There are four verbatim blocks in comment #0 that show UBSAN errors while running `make check`.

So far, fixes have only been applied for the issues in the first of these verbatim blocks.

I started to look at the second verbatim block. But wanted to ask whether any fix is actually necessary for that case. If I understood correctly, we probably don't need to change anything for that.

I haven't yet looked at the root cause for the issues in the third or forth verbatim block in comment #0.

Markus Mützel <mmuetzel>
Group administrator
Wed 19 Feb 2025 08:28:46 PM UTC, comment #7: 

Except for the issue in tensorprod.m, are there any remaining UBSAN warnings to fix?

Rik <rik5>
Group administrator
Wed 19 Feb 2025 08:27:57 PM UTC, comment #6: 

I don't think we need to do anything here.  Perhaps the C++ specification does not specify what will happen when non-finite values such as Inf or NaN are cast to integer.  The exact value may be undefined, however the representation must be an integer.  And when the reverse cast to double happens there is no way that an integer can be promoted to a NaN because the IEEE bit pattern is very specific and includes bits outside the mantissa.

I created a simple example in C++ program to check


#include <iostream>
#include <limits>

using namespace std;

int
main (void)
{
  typedef int64_t octave_idx_type;

  double x = numeric_limits<double>::quiet_NaN ();

  octave_idx_type i = static_cast<octave_idx_type> (x);
  cout << "cast value of i = " << i << "\n";

  if (static_cast<double> (i) != x)
    cout << "err_invalid_index (correct)" << "\n";
  else
    cout << "PROBLEM, this should have been an error\n";

  return 0;
}


Results with g++ 11.2.0


cast value of i = 0
err_invalid_index (correct)




(file #56927)

Rik <rik5>
Group administrator
Mon 17 Feb 2025 07:42:07 AM UTC, comment #5: 

Correct. Afaict, the undefined behavior arises when trying to cast an Inf or NaN floating point value to an integer type.

Markus Mützel <mmuetzel>
Group administrator
Sun 16 Feb 2025 01:19:51 PM UTC, comment #4: 

Is it an issue of casting NaN and Inf to integer?

Dmitri.
--

Dmitri A. Sergatskov <dasergatskov>
Sun 16 Feb 2025 11:48:11 AM UTC, comment #3: 

The UBSAN is triggering in the following function for the tests in `linear-algebra/tensorprod.m`:

inline octave_idx_type
convert_index (double x, octave_idx_type& ext)
{
  octave_idx_type i = static_cast<octave_idx_type> (x);

  if (static_cast<double> (i) != x)
    err_invalid_index (x-1);

  return convert_index (i, ext);
}


So, we are already checking -- after the fact -- if the cast resulted in a "sane" value by casting back to the original type and comparing the results.

I'm not sure what "undefined behavior" means in this specific case. Does it mean that the initial cast could result in "any" value but it will never cause an error? Or would a complying implementation be allowed to throw an error (or abort?) for that cast?

The current implementation looks pretty efficient. But if it is "risky", should we try and check before the cast?

Markus Mützel <mmuetzel>
Group administrator
Sat 15 Feb 2025 03:08:42 PM UTC, comment #2: 

I pushed the following two changes to avoid the undefined behavior during the tests in libinterp/corefcn/pr-output.cc-tst:
https://hg.savannah.gnu.org/hgweb/octave/rev/7d363f20a4d9
https://hg.savannah.gnu.org/hgweb/octave/rev/289549e8cde5

Markus Mützel <mmuetzel>
Group administrator
Fri 14 Feb 2025 03:18:13 PM UTC, comment #1: 

Rapidjson fixed this problem in the repo many years ago.
The fix is like

-        if (RAPIDJSON_UNLIKELY(stackTop_ + sizeof(T) * count > stackEnd_))
+        if (RAPIDJSON_UNLIKELY(static_cast<std::ptrdiff_t>(sizeof(T) * count) > (stackEnd_ - stackTop_)))


perhaps gnulib can do a similar fix.

Dmitri.
--

Dmitri A. Sergatskov <dasergatskov>
Fri 14 Feb 2025 03:08:02 PM UTC, original submission:  

Octave is configured with:

../configure CC=clang 'CXX=clang++ -std=gnu++17' 'CFLAGS=-ggdb3 -O0 -march=native -fno-omit-frame-pointer -fsanitize=undefined ' 'CXXFLAGS=-ggdb3 -O0 -march=native -fno-omit-frame-pointer -fsanitize=undefined' 'FFLAGS=-ggdb3 -O0 -march=native -fno-omit-frame-pointer -fsanitize=undefined' --disable-docs --disable-java --with-blas=flexiblas --enable-std-pmr-polymorphic-allocator --enable-lib-visibility-flags


When running the test suite, a couple of UBSAN errors are emitted. Dropping the ones that are not in our code (but, e.g., in a header from RapidJSON or in gnulib):

  libinterp/corefcn/pr-output.cc-tst .............................../liboctave/util/oct-string.cc:977:61: runtime error: 5.99135e+12 is outside the range of representable values of type 'int'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../liboctave/util/oct-string.cc:977:61
../liboctave/util/oct-string.cc:978:43: runtime error: -2.99492e+12 is outside the range of representable values of type 'int'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../liboctave/util/oct-string.cc:978:43
../libinterp/corefcn/pr-output.cc:168:35: runtime error: inf is outside the range of representable values of type 'int'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../libinterp/corefcn/pr-output.cc:168:35
 pass   12/13   [ 0.230s /  0.232s]
                                                    (reported bug) XFAIL   1



  linear-algebra/tensorprod.m ....................................../liboctave/array/idx-vector.cc:232:53: runtime error: nan is outside the range of representable values of type 'long'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../liboctave/array/idx-vector.cc:232:53
 pass  126/126  [ 1.966s /  1.978s]



  signal/movfun.m ................................................../libinterp/octave-value/ov-re-mat.cc:228:42: runtime error: nan is outside the range of representable values of type 'char'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../libinterp/octave-value/ov-re-mat.cc:228:42
../libinterp/octave-value/ov-scalar.h:201:36: runtime error: nan is outside the range of representable values of type 'char'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../libinterp/octave-value/ov-scalar.h:201:36
 pass  289/289  [ 8.811s /  8.878s]



  range.tst ......................................................../libinterp/octave-value/ov.cc:3099:27: runtime error: 256 is outside the range of representable values of type 'unsigned char'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../libinterp/octave-value/ov.cc:3099:27
../libinterp/octave-value/ov.cc:3099:27: runtime error: 65536 is outside the range of representable values of type 'unsigned short'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../libinterp/octave-value/ov.cc:3099:27
../libinterp/octave-value/ov.cc:3099:27: runtime error: 4.29497e+09 is outside the range of representable values of type 'unsigned int'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../libinterp/octave-value/ov.cc:3099:27
../libinterp/octave-value/ov.cc:3099:27: runtime error: 1.84467e+19 is outside the range of representable values of type 'unsigned long'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../libinterp/octave-value/ov.cc:3099:27
 pass  395/395  [ 5.978s /  6.002s]



Most (or all) of these seem to be out-of-range issues with integer types. I seem to recall that we had a pass on these at some point in the past. But either we missed a couple or these are new ones.

Markus Mützel <mmuetzel>
Group administrator

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach Files:
   
   
Comment:
   

Attached Files
file #56927:  nantest.cpp added by rik5 (437B - text/x-c++src)

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by jwe (Posted a comment)
  • -email is unavailable- added by rik5 (Updated the item)
  • -email is unavailable- added by dasergatskov (Posted a comment)
  • -email is unavailable- added by mmuetzel (Submitted the item)
  •  

    There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.

    Only group members can vote.

     

    Follow 3 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2025-02-19 rik5 StatusNone In Progress
        Planned ReleaseNone 10.1.0 (current stable)
    2025-02-19 rik5 Attached File- Added nantest.cpp, #56927

    Back to the top

    Powered by Savane 3.14-7003.
    Corresponding source code