Subject: 30.0.50; tree sitter core dumps when I edebug view a node
From: Mickey Petersen <[email-masked]>
To: [email-masked]
Date: Wed, 21 Dec 2022 12:24:34 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Happens in emacs -Q (after loading some simple elisp code that uses treesit.el) and consistently and repeatedly.

Here's the elisp. When I edebug it I can step and view all the variables and expressions I like. The `combobulate-' functions are widely used in the library and pose no issues anywhere else and do nothing more than fetch nodes via tree sitter. It is only this bit of code that blows up, and then only when invoked inside a python string.

    (when-let ((navigable-node (combobulate--get-nearest-navigable-node)) ;; <-- edebugging these work fine;
                 (nearest-node (combobulate-node-at-point))
                 (targets (seq-filter
                           (lambda (elem) (and elem (< elem (point))))
                           (list (save-excursion (ignore-errors (backward-up-list 1 t t) (point)))
                                 (combobulate-node-point (combobulate--nav-get-parent navigable-node)) ;; <- call into this inner form blows up when I read the argument value of `navigable-node' on the inside.
                                 (combobulate-node-point (combobulate--nav-get-parent nearest-node))))))
        (when-let (target (apply #'max targets))
          (goto-char target)
          (combobulate--flash-node (combobulate--get-nearest-navigable-node))))

Here is the "fix"

    (when-let* ((navigable-node (combobulate--get-nearest-navigable-node))
                      (nearest-node (combobulate-node-at-point))
                      (navigable-node-parent (combobulate--nav-get-parent navigable-node))  ;; <- refactor out 
                      (nearest-node-parent (combobulate--nav-get-parent nearest-node)) ;; <- refactor out
                      (targets (seq-filter
                                (lambda (elem) (and elem (< elem (point))))
                                (list (save-excursion (ignore-errors (backward-up-list 1 t t) (point))) ; <- smoking gun
                                      (combobulate-node-point navigable-node-parent)
                                      (combobulate-node-point nearest-node-parent)))))
            (when-let (target (apply #'max targets))
              (goto-char target)
              (combobulate--flash-node (combobulate--get-nearest-navigable-node))))

Clearly, `ignore-errors' + `backward-up-list' which throws errors left and right if it doesn't like what it's seeing is causing this.

If I instead of edebugging just run the code, it hangs Emacs. I have to kill -9 it.

Core dump's half a gig; not going to attach it.

--- Backtrace from the dump here ---

#0  raise (sig=<optimised out>) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x000055e6f87a8e21 in terminate_due_to_signal (sig=sig@entry=11, backtrace_limit=-117776184, backtrace_limit@entry=40) at emacs.c:464
#2  0x000055e6f87a933d in handle_fatal_signal (sig=sig@entry=11) at sysdep.c:1783
#3  0x000055e6f8901f2d in deliver_thread_signal (sig=sig@entry=11, handler=0x55e6f87a932c <handle_fatal_signal>) at sysdep.c:1775
#4  0x000055e6f8901fad in deliver_fatal_thread_signal (sig=11) at sysdep.c:1888
#5  handle_sigsegv (sig=11, siginfo=<optimised out>, arg=<optimised out>) at sysdep.c:1888
#6  0x00007fb676b683c0 in <signal handler called> () at /lib/x86_64-linux-gnu/libpthread.so.0
#7  0x00007fb674ea6574 in ts_language_symbol_count () at /usr/local/lib/libtree-sitter.so.0
#8  0x00007fb674ea6773 in ts_language_symbol_name () at /usr/local/lib/libtree-sitter.so.0
#9  0x000055e6f8a01ca5 in Ftreesit_node_type (node=node@entry=XIL(0x55e6fdb98f2d)) at treesit.c:1705
#10 0x000055e6f899ee4d in print_vectorlike
    (obj=XIL(0x55e6fdb98f2d), printcharfun=XIL(0), escapeflag=<optimised out>, buf=0x7ffe8098a210 "\335M\351\371\346U") at print.c:2040
#11 0x000055e6f899cb51 in print_object (obj=XIL(0x55e6fdb98f2d), printcharfun=XIL(0), escapeflag=true) at print.c:2612
#12 0x000055e6f899d42c in Fprin1 (object=XIL(0x55e6fdb98f2d), printcharfun=XIL(0x55e6fd9fcdd5), overrides=<optimised out>) at print.c:777
#13 0x000055e6f89bc627 in exec_byte_code (fun=<optimised out>, args_template=<optimised out>, nargs=<optimised out>, args=<optimised out>)
    at lisp.h:2204
#14 0x000055e6f89735f7 in Ffuncall (nargs=3, args=0x7ffe8098a530) at eval.c:2995
#15 0x000055e6f8973880 in Fapply (nargs=2, args=0x7fb66f8327a8) at eval.c:2666
#16 0x000055e6f89bc627 in exec_byte_code (fun=<optimised out>, args_template=<optimised out>, nargs=<optimised out>, args=<optimised out>)
    at lisp.h:2204
#17 0x000055e6f89735f7 in Ffuncall (nargs=4, args=0x7ffe8098a680) at eval.c:2995
#18 0x000055e6f8973880 in Fapply (nargs=3, args=0x7fb66f832700) at eval.c:2666
#19 0x000055e6f89bc627 in exec_byte_code (fun=<optimised out>, args_template=<optimised out>, nargs=<optimised out>, args=<optimised out>)
    at lisp.h:2204
#20 0x000055e6f89735f7 in Ffuncall (nargs=3, args=0x7fb66f832660) at eval.c:2995
#21 0x000055e6f8973b0a in Fapply (nargs=3, args=0x7fb66f832660) at eval.c:2623
#22 0x000055e6f89bc627 in exec_byte_code (fun=<optimised out>, args_template=<optimised out>, nargs=<optimised out>, args=<optimised out>)
    at lisp.h:2204
#23 0x000055e6f89bc366 in exec_byte_code (fun=<optimised out>, args_template=<optimised out>, nargs=<optimised out>, args=<optimised out>)
    at bytecode.c:811
#24 0x000055e6f89735f7 in Ffuncall (nargs=nargs@entry=3, args=args@entry=0x7ffe8098a9f8) at eval.c:2995
#25 0x000055e6f896f293 in Ffuncall_interactively (nargs=3, args=0x7ffe8098a9f8) at callint.c:248
#26 0x000055e6f89735f7 in Ffuncall (nargs=4, args=0x7ffe8098a9f0) at eval.c:2995
#27 0x000055e6f8973880 in Fapply (nargs=nargs@entry=3, args=args@entry=0x7ffe8098ab60) at eval.c:2666
#28 0x000055e6f8970c57 in Fcall_interactively (function=XIL(0x3a90730), record_flag=XIL(0), keys=XIL(0x55e6fd9f8a6d)) at lisp.h:1171
#29 0x00007fb6706bdc95 in F636f6d6d616e642d65786563757465_command_execute_0 ()
    at /home/mickey/Downloads/emacs/src/../native-lisp/30.0.50-7cb43add/preloaded/simple-fab5b0cf-b9ebea66.eln
#30 0x000055e6f89735f7 in Ffuncall (nargs=nargs@entry=2, args=args@entry=0x7ffe8098ad10) at eval.c:2995
#31 0x000055e6f88f5ea0 in call1 (arg1=<optimised out>, fn=XIL(0x4c20)) at lisp.h:3247
#32 command_loop_1 () at keyboard.c:1495
#33 0x000055e6f8971bf7 in internal_condition_case
    (bfun=bfun@entry=0x55e6f88f5a80 <command_loop_1>, handlers=handlers@entry=XIL(0x90), hfun=hfun@entry=0x55e6f88e8b60 <cmd_error>)
    at eval.c:1474
#34 0x000055e6f88e11ea in command_loop_2 (handlers=handlers@entry=XIL(0x90)) at keyboard.c:1125
#35 0x000055e6f8971b39 in internal_catch
    (tag=tag@entry=XIL(0x6b10), func=func@entry=0x55e6f88e11c0 <command_loop_2>, arg=arg@entry=XIL(0x90)) at eval.c:1197
#36 0x000055e6f88e113c in command_loop () at lisp.h:1171
#37 0x000055e6f88e86b8 in recursive_edit_1 () at keyboard.c:712
#38 0x000055e6f88e8a60 in Frecursive_edit () at keyboard.c:795
#39 0x000055e6f89bc627 in exec_byte_code (fun=<optimised out>, args_template=<optimised out>, nargs=<optimised out>, args=<optimised out>)
    at lisp.h:2204
#40 0x000055e6f89735f7 in Ffuncall (nargs=3, args=0x7fb66f8323d8) at eval.c:2995
#41 0x000055e6f8973b0a in Fapply (nargs=3, args=0x7fb66f8323d8) at eval.c:2623
#42 0x000055e6f89bc627 in exec_byte_code (fun=<optimised out>, args_template=<optimised out>, nargs=<optimised out>, args=<optimised out>)
    at lisp.h:2204
#43 0x000055e6f8978c0f in apply_lambda (fun=<optimised out>, args=<optimised out>, count=...) at eval.c:3103
#44 0x000055e6f8976d4b in eval_sub (form=<optimised out>) at eval.c:2588
#45 0x000055e6f8978bce in apply_lambda (fun=<optimised out>, args=<optimised out>, count=...) at eval.c:3098
#46 0x000055e6f8976d4b in eval_sub (form=<optimised out>) at eval.c:2588
#47 0x000055e6f897862d in Fprogn (body=XIL(0)) at eval.c:436
#48 funcall_lambda (fun=XIL(0x55e6fc3bf1f3), nargs=0, arg_vector=0x7fb66f832168) at eval.c:3233
#49 0x000055e6f89bc366 in exec_byte_code (fun=<optimised out>, args_template=<optimised out>, nargs=<optimised out>, args=<optimised out>)
    at bytecode.c:811
#50 0x000055e6f8978c0f in apply_lambda (fun=<optimised out>, args=<optimised out>, count=...) at eval.c:3103
#51 0x000055e6f8976d4b in eval_sub (form=<optimised out>) at eval.c:2588
#52 0x000055e6f897862d in Fprogn (body=XIL(0)) at eval.c:436
#53 funcall_lambda (fun=XIL(0x55e6f9db7153), nargs=1, arg_vector=0x7ffe8098b670) at eval.c:3233
#54 0x000055e6f8978c0f in apply_lambda (fun=<optimised out>, args=<optimised out>, count=...) at eval.c:3103
#55 0x000055e6f8976d4b in eval_sub (form=<optimised out>) at eval.c:2588
#56 0x000055e6f8978bce in apply_lambda (fun=<optimised out>, args=<optimised out>, count=...) at eval.c:3098
#57 0x000055e6f8976d4b in eval_sub (form=<optimised out>) at eval.c:2588
#58 0x000055e6f897723d in eval_sub (form=<optimised out>) at eval.c:2465
#59 0x000055e6f8978bce in apply_lambda (fun=<optimised out>, args=<optimised out>, count=...) at eval.c:3098
#60 0x000055e6f8976d4b in eval_sub (form=<optimised out>) at eval.c:2588
#61 0x000055e6f897774d in Fand (args=XIL(0)) at eval.c:370
#62 0x000055e6f8977428 in eval_sub (form=<optimised out>) at lisp.h:2204
#63 0x000055e6f8979496 in FletX (args=XIL(0x55e6fd7f83c3)) at lisp.h:1522
#64 0x000055e6f8977428 in eval_sub (form=<optimised out>) at lisp.h:2204
#65 0x000055e6f8977f97 in Fprog1 (args=XIL(0x55e6fd7f7c13)) at lisp.h:1516
#66 0x000055e6f8977428 in eval_sub (form=<optimised out>) at lisp.h:2204
#67 0x000055e6f89797eb in Funwind_protect (args=XIL(0x55e6fd7f7c73)) at lisp.h:1516
#68 0x000055e6f8977428 in eval_sub (form=<optimised out>) at lisp.h:2204
#69 0x000055e6f8979235 in Fprogn (body=XIL(0)) at eval.c:436
#70 Flet (args=<optimised out>) at eval.c:1026
#71 0x000055e6f8977428 in eval_sub (form=<optimised out>) at lisp.h:2204
#72 0x000055e6f8979235 in Fprogn (body=XIL(0)) at eval.c:436
#73 Flet (args=<optimised out>) at eval.c:1026
#74 0x000055e6f8977428 in eval_sub (form=<optimised out>) at lisp.h:2204
#75 0x000055e6f8977ef5 in Fprogn (body=XIL(0x55e6fd8a41b3)) at eval.c:436
#76 prog_ignore (body=XIL(0x55e6fd7f7e03)) at eval.c:447
#77 Fwhile (args=<optimised out>) at eval.c:1047
#78 0x000055e6f8977428 in eval_sub (form=<optimised out>) at lisp.h:2204
#79 0x000055e6f897964d in Fprogn (body=XIL(0)) at eval.c:436
#80 FletX (args=XIL(0x55e6fd7f7eb3)) at eval.c:958
#81 0x000055e6f8977428 in eval_sub (form=<optimised out>) at lisp.h:2204
#82 0x000055e6f897862d in Fprogn (body=XIL(0)) at eval.c:436
#83 funcall_lambda (fun=XIL(0x55e6fd7f7f93), nargs=1, arg_vector=0x7ffe8098c4e0) at eval.c:3233
#84 0x000055e6f89735f7 in Ffuncall (nargs=nargs@entry=2, args=args@entry=0x7ffe8098c4d8) at eval.c:2995
#85 0x000055e6f896f293 in Ffuncall_interactively (nargs=2, args=0x7ffe8098c4d8) at callint.c:248
#86 0x000055e6f89735f7 in Ffuncall (nargs=nargs@entry=3, args=args@entry=0x7ffe8098c4d0) at eval.c:2995
#87 0x000055e6f89708d3 in Fcall_interactively (function=<optimised out>, record_flag=<optimised out>, keys=<optimised out>)
    at callint.c:785
#88 0x00007fb6706bdc95 in F636f6d6d616e642d65786563757465_command_execute_0 ()
    at /home/mickey/Downloads/emacs/src/../native-lisp/30.0.50-7cb43add/preloaded/simple-fab5b0cf-b9ebea66.eln
#89 0x000055e6f89735f7 in Ffuncall (nargs=nargs@entry=2, args=args@entry=0x7ffe8098c7b0) at eval.c:2995
#90 0x000055e6f88f5ea0 in call1 (arg1=<optimised out>, fn=XIL(0x4c20)) at lisp.h:3247
#91 command_loop_1 () at keyboard.c:1495
#92 0x000055e6f8971bf7 in internal_condition_case
    (bfun=bfun@entry=0x55e6f88f5a80 <command_loop_1>, handlers=handlers@entry=XIL(0x90), hfun=hfun@entry=0x55e6f88e8b60 <cmd_error>)
    at eval.c:1474
#93 0x000055e6f88e11ea in command_loop_2 (handlers=handlers@entry=XIL(0x90)) at keyboard.c:1125
#94 0x000055e6f8971b39 in internal_catch
    (tag=tag@entry=XIL(0xffc0), func=func@entry=0x55e6f88e11c0 <command_loop_2>, arg=arg@entry=XIL(0x90)) at eval.c:1197
#95 0x000055e6f88e1186 in command_loop () at lisp.h:1171
#96 0x000055e6f88e86b8 in recursive_edit_1 () at keyboard.c:712
#97 0x000055e6f88e8a60 in Frecursive_edit () at keyboard.c:795
#98 0x000055e6f87b23b8 in main (argc=<optimised out>, argv=<optimised out>) at emacs.c:2529

--- END ---

In GNU Emacs 30.0.50 (build 2, x86_64-pc-linux-gnu, GTK+ Version
 3.24.20, cairo version 1.16.0) of 2022-11-29 built on mickey-work
Repository revision: 7939184f8e0370e7a3397d492812c6d202c2a193
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12013000
System Description: Ubuntu 20.04.3 LTS

Configured using:
 'configure --with-native-compilation --with-json --with-mailutils
 --without-compress-install --with-imagemagick CC=gcc-10'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ
IMAGEMAGICK JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2
M17N_FLT MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP
SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER X11 XDBE
XIM XINPUT2 XPM GTK3 ZLIB

Important settings:
  value of $LC_MONETARY: en_GB.UTF-8
  value of $LC_NUMERIC: en_GB.UTF-8
  value of $LC_TIME: en_GB.UTF-8
  value of $LANG: en_GB.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix