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 #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Renato Fernandes de Queiroz <renatofq <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 30.0.91; infinite loop in c-ts-mode--anchor-prev-sibling
Date: Mon, 14 Oct 2024 00:53:56 -0300
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 216 days ago.

Previous Next


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