octave-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Octave-bug-tracker] [bug #64213] crash while using subsasgn with struct


From: Dmitri A. Sergatskov
Subject: [Octave-bug-tracker] [bug #64213] crash while using subsasgn with struct and multiple subs value
Date: Thu, 18 May 2023 11:33:01 -0400 (EDT)

URL:
  <https://savannah.gnu.org/bugs/?64213>

                 Summary: crash while using subsasgn with struct and multiple
subs value
                   Group: GNU Octave
               Submitter: dasergatskov
               Submitted: Thu 18 May 2023 03:32:59 PM UTC
                Category: Interpreter
                Severity: 3 - Normal
                Priority: 5 - Normal
              Item Group: None
                  Status: None
             Assigned to: None
         Originator Name: 
        Originator Email: 
             Open/Closed: Open
                 Release: dev
         Discussion Lock: Any
        Operating System: Any
           Fixed Release: None
         Planned Release: None


    _______________________________________________________

Follow-up Comments:


-------------------------------------------------------
Date: Thu 18 May 2023 03:32:59 PM UTC By: Dmitri A. Sergatskov <dasergatskov>
See discussion at 
https://octave.discourse.group/t/panic-impossible-state-reached-while-using-subsasgn-with-struct-and-multiple-subs-value/4494

The code (also attached)

function o = nested_assignment(name_list, value)
    idx.type = ".";
    idx.subs = {};

    name_list_length = length (name_list);

    for i = 1:name_list_length
        idx.subs{i} = name_list{i};
    endfor

    o = struct ();
    subsasgn (o, idx, value);
endfunction


crashes when called:

nested_assignment({"Vipul", "Cariappa", "N", "T"}, 3)


on 8.2.0 and the latest dev snapshot (28ef2991fb5a tip @

Backtrace (also attached):



(gdb) thread apply all bt

Thread 8 (Thread 0x7ffed5bff640 (LWP 250189) "QThread"):
#0  0x00007ffff1c55b0a in sigtimedwait () at /lib64/libc.so.6
#1  0x00007ffff1c5514c in sigwait () at /lib64/libc.so.6
#2  0x00007ffff43befea in signal_watcher(void*) (arg=0x7ffff75314a5
<octave::generic_sig_handler(int)>) at
../liboctave/wrappers/cxx-signal-helpers.cc:179
#3  0x00007ffff1c9f832 in start_thread () at /lib64/libc.so.6
#4  0x00007ffff1c3f450 in clone3 () at /lib64/libc.so.6

Thread 7 (Thread 0x7ffed6734640 (LWP 250188) "QThread"):
#0  0x00007ffff1ca157c in __pthread_kill_implementation () at
/lib64/libc.so.6
#1  0x00007ffff1c54d46 in raise () at /lib64/libc.so.6
#2  0x00007ffff1c287f3 in abort () at /lib64/libc.so.6
#3  0x00007ffff715ea1a in octave::error_system::vpanic(char const*,
__va_list_tag*) (this=0x7ffec8008b48, fmt=0x7ffff75d29a0 "impossible state
reached in file '%s' at line %d", args=0x7ffed6730df8) at
../libinterp/corefcn/error.cc:633
#4  0x00007ffff7161b16 in vpanic(char const*, __va_list_tag*)
(fmt=0x7ffff75d29a0 "impossible state reached in file '%s' at line %d",
args=0x7ffed6730df8) at ../libinterp/corefcn/error.cc:1102
#5  0x00007ffff7161bbd in panic(char const*, ...) (fmt=0x7ffff75d29a0
"impossible state reached in file '%s' at line %d") at
../libinterp/corefcn/error.cc:1111
#6  0x00007ffff6e43797 in panic_if(bool) (cond=true) at
../libinterp/corefcn/error.h:507
#7  0x00007ffff6f067fa in
octave_scalar_struct::subsasgn(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&, octave_value const&) (this=0x7ffec847b1d0, type=".",
idx=std::__cxx11::list = {...}, rhs=...) at
../libinterp/octave-value/ov-struct.cc:1234
#8  0x00007ffff6f1eda7 in
octave_value::subsasgn(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&, octave_value const&) (this=0x7ffed67310e8, type=".",
idx=std::__cxx11::list = {...}, rhs=...) at
../libinterp/octave-value/ov.cc:1510
#9  0x00007ffff6f2e4da in octave::Fsubsasgn(octave_value_list const&, int)
(args=...) at ../libinterp/octave-value/ov.cc:3749
#10 0x00007ffff6ffc3d6 in
octave::tree_evaluator::execute_builtin_function(octave_builtin&, int,
octave_value_list const&) (this=0x7ffec8008c38, builtin_function=...,
nargout=0, args=...) at ../libinterp/parse-tree/pt-eval.cc:3362
#11 0x00007ffff6e54927 in octave_builtin::execute(octave::tree_evaluator&,
int, octave_value_list const&) (this=0x7ffec8080b90, tw=..., nargout=0,
args=...) at ../libinterp/octave-value/ov-builtin.cc:49
#12 0x00007ffff6eb8140 in octave_function::call(octave::tree_evaluator&, int,
octave_value_list const&) (this=0x7ffec8080b90, tw=..., nargout=0, args=...)
at ../libinterp/octave-value/ov-fcn.cc:57
#13 0x00007ffff701e05d in
octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int)
(this=0x7ffec82b3040, tw=..., nargout=0) at
../libinterp/parse-tree/pt-idx.cc:427
#14 0x00007ffff7020b97 in
octave::tree_index_expression::evaluate(octave::tree_evaluator&, int)
(this=0x7ffec82b3040, tw=..., nargout=0) at
../libinterp/parse-tree/pt-idx.h:104
#15 0x00007ffff6ffdf45 in
octave::tree_evaluator::visit_statement(octave::tree_statement&)
(this=0x7ffec8008c38, stmt=...) at ../libinterp/parse-tree/pt-eval.cc:3863
#16 0x00007ffff702a942 in octave::tree_statement::accept(octave::tree_walker&)
(this=0x7ffec82b3390, tw=...) at ../libinterp/parse-tree/pt-stmt.h:120
#17 0x00007ffff6ffe41f in
octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&)
(this=0x7ffec8008c38, lst=...) at ../libinterp/parse-tree/pt-eval.cc:3948
#18 0x00007ffff6e0450c in
octave::tree_statement_list::accept(octave::tree_walker&)
(this=0x7ffec8474df0, tw=...) at ../libinterp/parse-tree/pt-stmt.h:193
#19 0x00007ffff6ffd065 in
octave::tree_evaluator::execute_user_function(octave_user_function&, int,
octave_value_list const&) (this=0x7ffec8008c38, user_function=..., nargout=0,
xargs=...) at ../libinterp/parse-tree/pt-eval.cc:3587
#20 0x00007ffff6f13a3b in
octave_user_function::execute(octave::tree_evaluator&, int, octave_value_list
const&) (this=0x7ffec824d5a0, tw=..., nargout=0, args=...) at
../libinterp/octave-value/ov-usr-fcn.cc:495
#21 0x00007ffff6f139b4 in octave_user_function::call(octave::tree_evaluator&,
int, octave_value_list const&) (this=0x7ffec824d5a0, tw=..., nargout=0,
args=...) at ../libinterp/octave-value/ov-usr-fcn.cc:488
#22 0x00007ffff701e05d in
octave::tree_index_expression::evaluate_n(octave::tree_evaluator&, int)
(this=0x7ffec8306dc0, tw=..., nargout=0) at
../libinterp/parse-tree/pt-idx.cc:427
#23 0x00007ffff7020b97 in
octave::tree_index_expression::evaluate(octave::tree_evaluator&, int)
(this=0x7ffec8306dc0, tw=..., nargout=0) at
../libinterp/parse-tree/pt-idx.h:104
#24 0x00007ffff6ffdf45 in
octave::tree_evaluator::visit_statement(octave::tree_statement&)
(this=0x7ffec8008c38, stmt=...) at ../libinterp/parse-tree/pt-eval.cc:3863
#25 0x00007ffff702a942 in octave::tree_statement::accept(octave::tree_walker&)
(this=0x7ffec82116d0, tw=...) at ../libinterp/parse-tree/pt-stmt.h:120
#26 0x00007ffff6ffe41f in
octave::tree_evaluator::visit_statement_list(octave::tree_statement_list&)
(this=0x7ffec8008c38, lst=...) at ../libinterp/parse-tree/pt-eval.cc:3948
#27 0x00007ffff6e0450c in
octave::tree_statement_list::accept(octave::tree_walker&)
(this=0x7ffec849ced0, tw=...) at ../libinterp/parse-tree/pt-stmt.h:193
#28 0x00007ffff6ff358c in
octave::tree_evaluator::eval(std::shared_ptr<octave::tree_statement_list>&,
bool) (this=0x7ffec8008c38,
stmt_list=std::shared_ptr<octave::tree_statement_list> (use count 2, weak
count 0) = {...}, interactive=true) at ../libinterp/parse-tree/pt-eval.cc:985
#29 0x00007ffff6ff2c06 in octave::tree_evaluator::repl() (this=0x7ffec8008c38)
at ../libinterp/parse-tree/pt-eval.cc:804
#30 0x00007ffff73cb4c5 in octave::interpreter::main_loop()
(this=0x7ffec8008a40) at ../libinterp/corefcn/interpreter.cc:1315
#31 0x00007ffff73c5f1a in octave::interpreter::execute() (this=0x7ffec8008a40)
at ../libinterp/corefcn/interpreter.cc:883
#32 0x00007ffff7bef4b0 in octave::interpreter_qobject::execute()
(this=0x71a530) at ../libgui/src/interpreter-qobject.cc:87
#33 0x00007ffff7cfcdb2 in
octave::interpreter_qobject::qt_static_metacall(QObject*, QMetaObject::Call,
int, void**) (_o=0x71a530, _c=QMetaObject::InvokeMetaMethod, _id=2,
_a=0x9bd2c8) at libgui/src/moc-interpreter-qobject.cc:88
#34 0x00007ffff4ed2cd9 in QObject::event(QEvent*) () at
/lib64/libQt5Core.so.5
#35 0x00007ffff5baf533 in QApplicationPrivate::notify_helper(QObject*,
QEvent*) () at /lib64/libQt5Widgets.so.5
#36 0x00007ffff7c6152d in octave::octave_qapplication::notify(QObject*,
QEvent*) (this=0x4a7110, receiver=0x71a530, ev=0x9bd280) at
../libgui/src/octave-qobject.cc:148
#37 0x00007ffff4ea7938 in QCoreApplication::notifyInternal2(QObject*, QEvent*)
() at /lib64/libQt5Core.so.5
#38 0x00007ffff4eaae86 in QCoreApplicationPrivate::sendPostedEvents(QObject*,
int, QThreadData*) () at /lib64/libQt5Core.so.5
#39 0x00007ffff4ef9d07 in postEventSourceDispatch(_GSource*, int (*)(void*),
void*) () at /lib64/libQt5Core.so.5
#40 0x00007ffff0f2fe2f in g_main_context_dispatch () at
/lib64/libglib-2.0.so.0
--Type <RET> for more, q to quit, c to continue without paging--c
#41 0x00007ffff0f84508 in g_main_context_iterate.constprop () at
/lib64/libglib-2.0.so.0
#42 0x00007ffff0f2d5f3 in g_main_context_iteration () at
/lib64/libglib-2.0.so.0
#43 0x00007ffff4ef97a8 in
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
at /lib64/libQt5Core.so.5
#44 0x00007ffff4ea6342 in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at
/lib64/libQt5Core.so.5
#45 0x00007ffff4ce89aa in QThread::exec() () at /lib64/libQt5Core.so.5
#46 0x00007ffff4ce9c8d in QThreadPrivate::start(void*) () at
/lib64/libQt5Core.so.5
#47 0x00007ffff1c9f832 in start_thread () at /lib64/libc.so.6
#48 0x00007ffff1c3f450 in clone3 () at /lib64/libc.so.6

Thread 5 (Thread 0x7ffed7011640 (LWP 250182) "gdbus"):
#0  0x00007ffff1d4296f in poll () at /lib64/libc.so.6
#1  0x00007ffff0f8449c in g_main_context_iterate.constprop () at
/lib64/libglib-2.0.so.0
#2  0x00007ffff0f2f483 in g_main_loop_run () at /lib64/libglib-2.0.so.0
#3  0x00007ffedc1eae1a in gdbus_shared_thread_func.lto_priv () at
/lib64/libgio-2.0.so.0
#4  0x00007ffff0f5e582 in g_thread_proxy () at /lib64/libglib-2.0.so.0
#5  0x00007ffff1c9f832 in start_thread () at /lib64/libc.so.6
#6  0x00007ffff1c3f450 in clone3 () at /lib64/libc.so.6

Thread 4 (Thread 0x7ffed7812640 (LWP 250181) "gmain"):
#0  0x00007ffff1d4296f in poll () at /lib64/libc.so.6
#1  0x00007ffff0f8449c in g_main_context_iterate.constprop () at
/lib64/libglib-2.0.so.0
#2  0x00007ffff0f2d5f3 in g_main_context_iteration () at
/lib64/libglib-2.0.so.0
#3  0x00007ffff0f2d641 in glib_worker_main () at /lib64/libglib-2.0.so.0
#4  0x00007ffff0f5e582 in g_thread_proxy () at /lib64/libglib-2.0.so.0
#5  0x00007ffff1c9f832 in start_thread () at /lib64/libc.so.6
#6  0x00007ffff1c3f450 in clone3 () at /lib64/libc.so.6

Thread 3 (Thread 0x7ffedd515640 (LWP 250167) "QXcbEventQueue"):
#0  0x00007ffff1d4296f in poll () at /lib64/libc.so.6
#1  0x00007ffff1a75f42 in poll (__timeout=-1, __nfds=1, __fds=0x7ffedd514108)
at /usr/include/bits/poll2.h:48
#2  _xcb_conn_wait (c=0x4bed80, vector=0x0, count=0x0, cond=<optimized out>)
at /usr/src/debug/libxcb-1.13.1-9.el9.x86_64/src/xcb_conn.c:479
#3  0x00007ffff1a7790c in _xcb_conn_wait (count=0x0, vector=0x0,
cond=0x4bedc0, c=0x4bed80) at
/usr/src/debug/libxcb-1.13.1-9.el9.x86_64/src/xcb_conn.c:445
#4  xcb_wait_for_event (c=0x4bed80) at
/usr/src/debug/libxcb-1.13.1-9.el9.x86_64/src/xcb_in.c:697
#5  0x00007fffee98f407 in QXcbEventQueue::run() () at
/lib64/libQt5XcbQpa.so.5
#6  0x00007ffff4ce9c8d in QThreadPrivate::start(void*) () at
/lib64/libQt5Core.so.5
#7  0x00007ffff1c9f832 in start_thread () at /lib64/libc.so.6
#8  0x00007ffff1c3f450 in clone3 () at /lib64/libc.so.6

Thread 2 (Thread 0x7ffeddd16640 (LWP 250166) "QDBusConnection"):
#0  0x00007ffff1d4296f in poll () at /lib64/libc.so.6
#1  0x00007ffff0f8449c in g_main_context_iterate.constprop () at
/lib64/libglib-2.0.so.0
#2  0x00007ffff0f2d5f3 in g_main_context_iteration () at
/lib64/libglib-2.0.so.0
#3  0x00007ffff4ef97a8 in
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
at /lib64/libQt5Core.so.5
#4  0x00007ffff4ea6342 in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at
/lib64/libQt5Core.so.5
#5  0x00007ffff4ce89aa in QThread::exec() () at /lib64/libQt5Core.so.5
#6  0x00007ffeddd85b8b in QDBusConnectionManager::run() () at
/lib64/libQt5DBus.so.5
#7  0x00007ffff4ce9c8d in QThreadPrivate::start(void*) () at
/lib64/libQt5Core.so.5
#8  0x00007ffff1c9f832 in start_thread () at /lib64/libc.so.6
#9  0x00007ffff1c3f450 in clone3 () at /lib64/libc.so.6

Thread 1 (Thread 0x7ffff1a3a300 (LWP 250095) "octave-gui"):
#0  0x00007ffff1d4296f in poll () at /lib64/libc.so.6
#1  0x00007ffff0f8449c in g_main_context_iterate.constprop () at
/lib64/libglib-2.0.so.0
#2  0x00007ffff0f2d5f3 in g_main_context_iteration () at
/lib64/libglib-2.0.so.0
#3  0x00007ffff4ef97a8 in
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
at /lib64/libQt5Core.so.5
#4  0x00007ffff4ea6342 in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at
/lib64/libQt5Core.so.5
#5  0x00007ffff4eae874 in QCoreApplication::exec() () at
/lib64/libQt5Core.so.5
#6  0x00007ffff7c62e6c in octave::base_qobject::exec() (this=0x7fffffffbfa0)
at ../libgui/src/octave-qobject.cc:423
#7  0x00007ffff7c77563 in octave::qt_application::execute()
(this=0x7fffffffc0f0) at ../libgui/src/qt-application.cc:102
#8  0x0000000000402767 in main(int, char**) (argc=8, argv=0x7fffffffc4f8) at
../src/main-gui.cc:150
(gdb) 


Dmitri.
-- 








    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?64213>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]