GNU bug report logs - #73800
30.0.91; infinite loop in c-ts-mode--anchor-prev-sibling

Previous Next

Package: emacs;

Reported by: Renato Fernandes de Queiroz <renatofq <at> gmail.com>

Date: Mon, 14 Oct 2024 08:16:02 UTC

Severity: normal

Found in version 30.0.91

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


Message #8 received at 73800 <at> debbugs.gnu.org (full text, mbox):

From: Charalampos Mitrodimas <charmitro <at> posteo.net>
To: Renato Fernandes de Queiroz <renatofq <at> gmail.com>
Cc: 73800 <at> debbugs.gnu.org
Subject: Re: bug#73800: 30.0.91; infinite loop in
 c-ts-mode--anchor-prev-sibling
Date: Mon, 14 Oct 2024 13:12:10 +0000
Hi,

I also had this issue a week but didn't bother looking into it. The
proposed fix works. Thanks Renato!

                        C. Mitrodimas

Renato Fernandes de Queiroz <renatofq <at> gmail.com> writes:

> Steps to reproduce:
> 1. Open a new buffer and load c-ts-mode
> 2. insert the following code
>
> int
> main (int argc, char *argv[])
> {
>   int x;
>
>   a
> }
>
> 3. Move point past 'a'
> 4. Hit TAB
>
> Emacs enters a infinite loop.
>
> I've set debug-on-quit to t and got
>
> Debugger entered--Lisp error: (quit)
>   looking-back("^[[:space:]]*" 283)
>   c-ts-mode--anchor-prev-sibling(#<treesit-node expression_statement
>   in 304-337> #<treesit-node compound_statement in 281-390> 304)
>   treesit--simple-indent-eval((c-ts-mode--anchor-prev-sibling
>   #<treesit-node expression_statement in 304-337> #<treesit-node
>   compound_statement in 281-390> 304))
>   treesit-simple-indent(#<treesit-node expression_statement in
>   304-337> #<treesit-node compound_statement in 281-390> 304)
>   apply(treesit-simple-indent (#<treesit-node expression_statement in
>   304-337> #<treesit-node compound_statement in 281-390> 304))
>   #[128 "\301\302\300!\2\"\207" [treesit-indent-function apply
>    default-value] 4 advice--forward](#<treesit-node
>    expression_statement in 304-337> #<treesit-node compound_statement
>   in 281-390> 304)
>   apply(#[128 "\301\302\300!\2\"\207" [treesit-indent-function apply
>   default-value] 4 advice--forward] (#<treesit-node
>   expression_statement in 304-337> #<treesit-node compound_statement
>  in 281-390> 304))
>   #f(advice c-ts-base--before-indent :filter-args #[128
>    "\301\302\300!\2\"\207" [treesit-indent-function apply
>    default-value] 4 advice--forward])(#<treesit-node
>    expression_statement in 304-337> #<treesit-node compound_statement
>   in 281-390> 304)
>   treesit--indent-1()
>   treesit-indent()
>   indent--funcall-widened(treesit-indent)
>   indent-for-tab-command(nil)
>   funcall-interactively(indent-for-tab-command nil)
>   command-execute(indent-for-tab-command)
>
>
> Looking at the function code I saw that a form that shoud be inside the
> condition. Probably a typo. The fix is trivial:
>
>
> diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
> index 576d715510d..9003201c651 100644
> --- a/lisp/progmodes/c-ts-mode.el
> +++ b/lisp/progmodes/c-ts-mode.el
> @@ -329,8 +329,8 @@ c-ts-mode--anchor-prev-sibling
>            ;; and starting the items on the same line as {.
>            (_ (goto-char (treesit-node-start prev-sibling))
>               (if (or (looking-back (rx bol (* whitespace))
> -                                   (line-beginning-position)))
> -                     (null (treesit-node-prev-sibling prev-sibling t))
> +                                   (line-beginning-position))
> +                     (null (treesit-node-prev-sibling prev-sibling t)))
>                   (setq continue nil)
>                 (setq prev-sibling
>                       (treesit-node-prev-sibling prev-sibling)))))))
>
> This bug was introduced at e49b479f869.
>
>
>
> In GNU Emacs 30.0.91 (build 1, x86_64-pc-linux-gnu, GTK+ Version
>  3.24.43, cairo version 1.18.2) of 2024-10-13 built on carcara
> Repository revision: ae75ea62324598654b32ed28bf644ec2bc4c04b2
> Repository branch: emacs-30
> System Description: Arch Linux
>
> Configured using:
>  'configure --with-pgtk --without-gconf --with-sound=no --without-gpm
>  --without-xaw3d --with-tree-sitter --with-modules --without-libotf
>  --without-m17n-flt --with-native-compilation'
>
> Configured features:
> ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GSETTINGS HARFBUZZ JPEG
> LCMS2 LIBSYSTEMD LIBXML2 MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PGTK
> PNG RSVG SECCOMP SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER
> WEBP XIM GTK3 ZLIB
>
> Important settings:
>   value of $LANG: pt_BR.UTF-8
>   locale-coding-system: utf-8-unix
>
> Major mode: C/*
>
> Minor modes in effect:
>   tooltip-mode: t
>   global-eldoc-mode: t
>   show-paren-mode: t
>   electric-indent-mode: t
>   mouse-wheel-mode: t
>   tool-bar-mode: t
>   menu-bar-mode: t
>   file-name-shadow-mode: t
>   global-font-lock-mode: t
>   font-lock-mode: t
>   blink-cursor-mode: t
>   minibuffer-regexp-mode: t
>   line-number-mode: t
>   indent-tabs-mode: t
>   transient-mark-mode: t
>   auto-composition-mode: t
>   auto-encryption-mode: t
>   auto-compression-mode: t
>
> Load-path shadows:
> None found.
>
> Features:
> (shadow sort mail-extr emacsbug message mailcap yank-media puny rfc822
> mml mml-sec epa derived epg rfc6068 epg-config gnus-util mm-decode
> mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader
> sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils
> dired-aux dired dired-loaddefs cl-print debug backtrace find-func
> cus-edit pp wid-edit cus-start cus-load time-date c++-ts-mode c-ts-mode
> c-ts-common treesit cl-extra noutline outline help-fns radix-tree
> help-mode vc-git diff-mode track-changes easy-mmode vc-dispatcher
> cc-mode cc-fonts cc-guess cc-menus cc-cmds cc-styles cc-align cc-engine
> cc-vars cc-defs compile text-property-search comint ansi-osc ansi-color
> ring comp-run comp-common rx ffap thingatpt url-parse auth-source cl-seq
> eieio eieio-core cl-macs icons cl-loaddefs cl-lib password-cache json
> subr-x map byte-opt gv bytecomp byte-compile url-vars rmc iso-transl
> tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks
> lisp-float-type elisp-mode mwheel term/pgtk-win pgtk-win term/common-win
> touch-screen pgtk-dnd tool-bar dnd fontset image regexp-opt fringe
> tabulated-list replace newcomment text-mode lisp-mode prog-mode register
> page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
> scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
> frame minibuffer nadvice seq simple cl-generic indonesian philippine
> cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
> korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
> european ethiopic indian cyrillic chinese composite emoji-zwj charscript
> charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
> cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
> files window text-properties overlay sha1 md5 base64 format env
> code-pages mule custom widget keymap hashtable-print-readable backquote
> threads dbusbind inotify dynamic-setting system-font-setting
> font-render-setting cairo gtk pgtk lcms2 multi-tty move-toolbar
> make-network-process native-compile emacs)
>
> Memory information:
> ((conses 16 170635 186225) (symbols 48 13031 15)
>  (strings 32 39676 2329) (string-bytes 1 1551295) (vectors 16 21497)
>  (vector-slots 8 267270 42860) (floats 8 55 133)
>  (intervals 56 1333 679) (buffers 992 18))




This bug report was last modified 270 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.