Package: emacs;
Reported by: Eli Zaretskii <eliz <at> gnu.org>
Date: Sun, 15 Oct 2017 16:09:01 UTC
Severity: normal
Found in versions 27.0.50, 26.0.90
Done: Alan Mackenzie <acm <at> muc.de>
Bug is archived. No further changes may be made.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: bug-gnu-emacs <at> gnu.org, Alan Mackenzie <acm <at> muc.de> Subject: 26.0.90; Error running timer 'jit-lock-stealth-fontify': (error "Invalid search bound (wrong side of point)") Date: Sun, 15 Oct 2017 19:07:50 +0300
This bug is bugging me for quite some time now, and my hopes for it to be resolved are now gone, so I finally sat down to debug it. I have jit-lock-stealth turned on in my sessions, so whenever I restart Emacs (e.g., when I build a new binary, or after a system restart), and restore my session using desktop.el, Emacs starts fontifying in the background. At some point, sometimes more than once, I get this error: Error running timer 'jit-lock-stealth-fontify': (error "Invalid search bound (wrong side of point)") Today I ran Emacs under a debugger, and caught this error. The details are below, but in a nutshell, CC mode's fontification functions call re-search-forward with BOUND that is before point. I hope the data below is enough to understand why that happens and fix it; if not, please tell what additional data is needed to diagnose the problem. Here're the C and Lisp backtraces from the error, and some relevant data that explains why the error happened: Thread 1 hit Breakpoint 5, search_command (string=..., bound=make_number(123806), noerror=..., count=..., direction=direction <at> entry=1, RE=RE <at> entry=1, posix=posix <at> entry=false) at search.c:1046 1046 error ("Invalid search bound (wrong side of point)"); (gdb) bt #0 search_command (string=..., bound=make_number(123806), noerror=..., count=..., direction=direction <at> entry=1, RE=RE <at> entry=1, posix=posix <at> entry=false) at search.c:1046 #1 0x011cd2c9 in Fre_search_forward (regexp=XIL(0x800000000ad97598), bound=..., noerror=..., count=...) at search.c:2271 #2 0x0121f9f0 in funcall_subr (subr=<optimized out>, subr <at> entry=0x137fc48 <Sre_search_forward>, numargs=<optimized out>, numargs <at> entry=3, args=<optimized out>, args <at> entry=0x8898d0) at eval.c:2849 #3 0x0121ddc6 in Ffuncall (nargs=nargs <at> entry=4, args=args <at> entry=0x8898c8) at eval.c:2766 #4 0x0129445c in exec_byte_code (bytestr=XIL(0x800000000ad526b8), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=0, args=<optimized out>, args <at> entry=0x0) at bytecode.c:629 #5 0x0121d94f in funcall_lambda (fun=..., nargs=nargs <at> entry=4, arg_vector=arg_vector <at> entry=0x889ed0) at eval.c:3049 #6 0x0121de35 in Ffuncall (nargs=nargs <at> entry=5, args=args <at> entry=0x889ec8) at eval.c:2768 #7 0x0129445c in exec_byte_code (bytestr=XIL(0x800000000ad97558), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=0, args=<optimized out>, args <at> entry=0x0) at bytecode.c:629 #8 0x0121d94f in funcall_lambda (fun=..., nargs=nargs <at> entry=1, arg_vector=arg_vector <at> entry=0x88a410) at eval.c:3049 #9 0x0121de35 in Ffuncall (nargs=nargs <at> entry=2, args=args <at> entry=0x88a408) at eval.c:2768 #10 0x0129445c in exec_byte_code (bytestr=XIL(0x800000000add7b70), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=0, args=<optimized out>, args <at> entry=0x0) at bytecode.c:629 #11 0x0121d94f in funcall_lambda (fun=..., nargs=nargs <at> entry=5, arg_vector=arg_vector <at> entry=0x88a980) at eval.c:3049 #12 0x0121de35 in Ffuncall (nargs=nargs <at> entry=6, args=args <at> entry=0x88a978) at eval.c:2768 #13 0x0129445c in exec_byte_code (bytestr=XIL(0x800000000add8368), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=0, args=<optimized out>, args <at> entry=0x0) at bytecode.c:629 #14 0x0121d94f in funcall_lambda (fun=..., nargs=nargs <at> entry=5, arg_vector=arg_vector <at> entry=0x88ae50) at eval.c:3049 #15 0x0121de35 in Ffuncall (nargs=nargs <at> entry=6, args=args <at> entry=0x88ae48) at eval.c:2768 #16 0x0129445c in exec_byte_code (bytestr=XIL(0x800000000add83e8), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=0, args=<optimized out>, args <at> entry=0x0) at bytecode.c:629 #17 0x0121d94f in funcall_lambda (fun=..., nargs=nargs <at> entry=3, arg_vector=arg_vector <at> entry=0x88b310) at eval.c:3049 #18 0x0121de35 in Ffuncall (nargs=nargs <at> entry=4, args=args <at> entry=0x88b308) at eval.c:2768 #19 0x0129445c in exec_byte_code (bytestr=XIL(0x800000000ad54fe0), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=0, args=<optimized out>, args <at> entry=0x0) at bytecode.c:629 #20 0x0121d94f in funcall_lambda (fun=..., nargs=nargs <at> entry=4, arg_vector=arg_vector <at> entry=0x88c040) at eval.c:3049 #21 0x0121de35 in Ffuncall (nargs=nargs <at> entry=5, args=args <at> entry=0x88c038) at eval.c:2768 #22 0x0129445c in exec_byte_code (bytestr=XIL(0x800000000add83c8), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=0, args=<optimized out>, args <at> entry=0x0) at bytecode.c:629 #23 0x0121d94f in funcall_lambda (fun=..., nargs=nargs <at> entry=1, arg_vector=arg_vector <at> entry=0x88c410) at eval.c:3049 #24 0x0121de35 in Ffuncall (nargs=nargs <at> entry=2, args=args <at> entry=0x88c408) at eval.c:2768 #25 0x0129445c in exec_byte_code (bytestr=XIL(0x800000000146ae20), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=0, args=<optimized out>, args <at> entry=0x0) at bytecode.c:629 #26 0x0121d94f in funcall_lambda (fun=..., nargs=nargs <at> entry=3, arg_vector=arg_vector <at> entry=0x88ca70) at eval.c:3049 #27 0x0121de35 in Ffuncall (nargs=nargs <at> entry=4, args=args <at> entry=0x88ca68) at eval.c:2768 #28 0x0129445c in exec_byte_code (bytestr=XIL(0x8000000001469d78), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=0, args=<optimized out>, args <at> entry=0x0) at bytecode.c:629 #29 0x0121d94f in funcall_lambda (fun=..., nargs=nargs <at> entry=3, arg_vector=arg_vector <at> entry=0x88ce60) at eval.c:3049 #30 0x0121de35 in Ffuncall (nargs=nargs <at> entry=4, args=args <at> entry=0x88ce58) at eval.c:2768 #31 0x0129445c in exec_byte_code (bytestr=XIL(0x800000000adad4c0), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=0, args=<optimized out>, args <at> entry=0x0) at bytecode.c:629 #32 0x0121d94f in funcall_lambda (fun=..., nargs=nargs <at> entry=3, arg_vector=arg_vector <at> entry=0x88d230) at eval.c:3049 #33 0x0121de35 in Ffuncall (nargs=nargs <at> entry=4, args=args <at> entry=0x88d228) at eval.c:2768 #34 0x0129445c in exec_byte_code (bytestr=XIL(0x8000000001469798), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=0, args=<optimized out>, args <at> entry=0x0) at bytecode.c:629 #35 0x0121d94f in funcall_lambda (fun=..., nargs=nargs <at> entry=2, arg_vector=arg_vector <at> entry=0x88d578) at eval.c:3049 #36 0x0121de35 in Ffuncall (nargs=nargs <at> entry=3, args=args <at> entry=0x88d570) at eval.c:2768 #37 0x0129445c in exec_byte_code (bytestr=XIL(0x800000000146d9a8), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=1, args=<optimized out>, args <at> entry=0x88daf8) at bytecode.c:629 #38 0x0121d467 in funcall_lambda (fun=..., nargs=nargs <at> entry=1, arg_vector=arg_vector <at> entry=0x88daf8) at eval.c:2967 #39 0x0121de35 in Ffuncall (nargs=nargs <at> entry=2, args=args <at> entry=0x88daf0) at eval.c:2768 #40 0x0121dfff in run_hook_wrapped_funcall (nargs=2, args=0x88daf0) at eval.c:2493 #41 0x0121b1e2 in run_hook_with_args (nargs=nargs <at> entry=2, args=args <at> entry=0x88daf0, funcall=funcall <at> entry=0x121dfcf <run_hook_wrapped_funcall>) at eval.c:2574 #42 0x0121b38b in Frun_hook_wrapped (nargs=2, args=0x88daf0) at eval.c:2508 #43 0x0121f8f8 in funcall_subr ( subr=subr <at> entry=0x167d5c8 <Srun_hook_wrapped>, numargs=numargs <at> entry=2, args=args <at> entry=0x88daf0) at eval.c:2821 #44 0x0121ddc6 in Ffuncall (nargs=nargs <at> entry=3, args=args <at> entry=0x88dae8) at eval.c:2766 #45 0x0129445c in exec_byte_code (bytestr=XIL(0x800000000146d938), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=2, args=<optimized out>, args <at> entry=0x88dee0) at bytecode.c:629 #46 0x0121d467 in funcall_lambda (fun=..., nargs=nargs <at> entry=2, arg_vector=arg_vector <at> entry=0x88dee0) at eval.c:2967 #47 0x0121de35 in Ffuncall (nargs=nargs <at> entry=3, args=args <at> entry=0x88ded8) at eval.c:2768 #48 0x0129445c in exec_byte_code (bytestr=XIL(0x800000000146da00), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=2, args=<optimized out>, args <at> entry=0x88e3e0) at bytecode.c:629 #49 0x0121d467 in funcall_lambda (fun=..., nargs=nargs <at> entry=2, arg_vector=arg_vector <at> entry=0x88e3e0) at eval.c:2967 #50 0x0121de35 in Ffuncall (nargs=nargs <at> entry=3, args=args <at> entry=0x88e3d8) at eval.c:2768 #51 0x0129445c in exec_byte_code (bytestr=XIL(0x800000000146dc90), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=1, args=<optimized out>, args <at> entry=0x88e9d0) at bytecode.c:629 #52 0x0121d467 in funcall_lambda (fun=..., nargs=nargs <at> entry=1, arg_vector=arg_vector <at> entry=0x88e9d0) at eval.c:2967 #53 0x0121de35 in Ffuncall (nargs=nargs <at> entry=2, args=args <at> entry=0x88e9c8) at eval.c:2768 #54 0x01220d8a in Fapply (nargs=2, args=0x88e9c8) at eval.c:2343 #55 0x0121f8f8 in funcall_subr (subr=subr <at> entry=0x167d668 <Sapply>, numargs=numargs <at> entry=2, args=args <at> entry=0x88e9c8) at eval.c:2821 #56 0x0121ddc6 in Ffuncall (nargs=nargs <at> entry=3, args=args <at> entry=0x88e9c0) at eval.c:2766 #57 0x0129445c in exec_byte_code (bytestr=XIL(0x80000000014770f8), vector=..., maxdepth=..., args_template=..., nargs=<optimized out>, nargs <at> entry=1, args=<optimized out>, args <at> entry=0x88edb8) at bytecode.c:629 #58 0x0121d467 in funcall_lambda (fun=..., nargs=nargs <at> entry=1, arg_vector=arg_vector <at> entry=0x88edb8) at eval.c:2967 #59 0x0121de35 in Ffuncall (nargs=nargs <at> entry=2, args=args <at> entry=0x88edb0) at eval.c:2768 #60 0x0121e088 in call1 (fn=XIL(0xf1f0), arg1=...) at eval.c:2617 #61 0x0114a180 in timer_check_2 (timers=..., idle_timers=...) at keyboard.c:4462 #62 0x01150644 in timer_check () at keyboard.c:4524 #63 0x0115069a in readable_events (flags=flags <at> entry=1) at keyboard.c:3340 #64 0x011594d2 in get_input_pending (flags=flags <at> entry=1) at keyboard.c:6824 #65 0x011596b9 in detect_input_pending_run_timers ( do_display=do_display <at> entry=true) at keyboard.c:9951 #66 0x012a9223 in wait_reading_process_output (time_limit=<optimized out>, nsecs=<optimized out>, nsecs <at> entry=0, read_kbd=<optimized out>, read_kbd <at> entry=-1, do_display=<optimized out>, wait_for_cell=..., wait_proc=<optimized out>, wait_proc <at> entry=0x0, just_wait_proc=<optimized out>, just_wait_proc <at> entry=0) at process.c:5504 #67 0x01159b56 in kbd_buffer_get_event (kbp=kbp <at> entry=0x88f47c, used_mouse_menu=used_mouse_menu <at> entry=0x88f7c3, end_time=end_time <at> entry=0x0) at keyboard.c:3831 #68 0x0115aab4 in read_event_from_main_queue (end_time=end_time <at> entry=0x0, local_getcjmp=local_getcjmp <at> entry=0x88f670, used_mouse_menu=used_mouse_menu <at> entry=0x88f7c3) at keyboard.c:2151 #69 0x0115ae38 in read_decoded_event_from_main_queue ( end_time=end_time <at> entry=0x0, local_getcjmp=local_getcjmp <at> entry=0x88f670, prev_event=XIL(0), used_mouse_menu=used_mouse_menu <at> entry=0x88f7c3) at keyboard.c:2214 #70 0x0115c9ff in read_char (commandflag=1, map=..., prev_event=..., used_mouse_menu=used_mouse_menu <at> entry=0x88f7c3, end_time=end_time <at> entry=0x0) at keyboard.c:2802 #71 0x0115e6be in read_key_sequence (keybuf=keybuf <at> entry=0x88f870, bufsize=bufsize <at> entry=30, prompt=XIL(0xfb938800000000), dont_downcase_last=dont_downcase_last <at> entry=false, can_return_switch_frame=can_return_switch_frame <at> entry=true, fix_current_buffer=fix_current_buffer <at> entry=true, prevent_redisplay=prevent_redisplay <at> entry=false) at keyboard.c:9147 #72 0x01161825 in command_loop_1 () at keyboard.c:1368 #73 0x0121a98e in internal_condition_case ( bfun=bfun <at> entry=0x1161517 <command_loop_1>, handlers=..., hfun=hfun <at> entry=0x114d246 <cmd_error>) at eval.c:1332 #74 0x01142ce3 in command_loop_2 (ignore=XIL(0)) at keyboard.c:1110 #75 0x0121a8f0 in internal_catch (tag=XIL(0xf538), func=func <at> entry=0x1142cbc <command_loop_2>, arg=...) at eval.c:1097 #76 0x01142c8b in command_loop () at keyboard.c:1089 #77 0x0114cba6 in recursive_edit_1 () at keyboard.c:695 #78 0x0114cff7 in Frecursive_edit () at keyboard.c:766 #79 0x01141ab3 in main (argc=<optimized out>, argv=<optimized out>) at emacs.c:1713 Lisp Backtrace: "re-search-forward" (0x8898d0) "c-syntactic-re-search-forward" (0x889ed0) "c-forward-declarator" (0x88a410) "c-font-lock-declarators" (0x88a980) "c-font-lock-single-decl" (0x88ae50) 0xad881a0 PVEC_COMPILED "c-find-decl-spots" (0x88c040) "c-font-lock-declarations" (0x88c410) "font-lock-fontify-keywords-region" (0x88ca70) "font-lock-default-fontify-region" (0x88ce60) "c-font-lock-fontify-region" (0x88d230) "font-lock-fontify-region" (0x88d578) 0x83d89a8 PVEC_COMPILED "run-hook-wrapped" (0x88daf0) "jit-lock--run-functions" (0x88dee0) "jit-lock-fontify-now" (0x88e3e0) "jit-lock-stealth-fontify" (0x88e9d0) "apply" (0x88e9c8) "timer-event-handler" (0x88edb8) (gdb) p n $1 = 1 (gdb) p lim $2 = <optimized out> (gdb) pp bound 123806 (gdb) p PT $3 = 123811 So point is 123811 and the BOUND argument of re-search-forward is 123806, too small. (gdb) up #1 0x011cd2c9 in Fre_search_forward (regexp=XIL(0x800000000ad97598), bound=..., noerror=..., count=...) at search.c:2271 2271 return search_command (regexp, bound, noerror, count, 1, 1, 0); (gdb) pp regexp "[;:,]\\|\\s)\\|\\(=\\|\\s(\\)" (gdb) p current_buffer $4 = (struct buffer *) 0xb362590 (gdb) pp current_buffer->name_ "process.c" These are the regexp argument to re-search-forward and the buffer which was being fontified. The problem happens in c-syntactic-re-search-forward in this snippet: (condition-case err (while (and (progn (setq search-pos (point)) (if (re-search-forward regexp bound noerror) <<<<<<<<<<< t ;; Without the following, when PAREN-LEVEL is non-nil, and ;; NOERROR is not nil or t, and the very first search above ;; has just failed, point would end up at BOUND rather than ;; just before the next close paren. (when (and (eq search-pos start) paren-level (not (memq noerror '(nil t)))) (setq state (parse-partial-sexp start bound -1)) (if (eq (car state) -1) (setq bound (1- (point))))) nil)) This is called from c-forward-declarator: ;; Search syntactically to the end of the declarator (";", ;; ",", a closing paren, eob etc) or to the beginning of an ;; initializer or function prototype ("=" or "\\s\("). ;; Note that square brackets are now not also treated as ;; initializers, since this broke when there were also ;; initializing brace lists. (let (found) (while (and (progn ;; In the next loop, we keep searching forward whilst ;; we find ":"s which aren't single colons inside C++ ;; "for" statements. (while (and (setq found (c-syntactic-re-search-forward <<<<<<<<<<< "[;:,]\\|\\s)\\|\\(=\\|\\s(\\)" limit t t)) It looks like c-syntactic-re-search-forward calls re-search-forward in a loop, but perhaps it fails to update the limit to be in sync with point that moves as the search proceeds? Let me know what other data I can provide to help fix this annoying problem. In GNU Emacs 26.0.90 (build 1, i686-pc-mingw32) of 2017-10-12 built on HOME-C4E4A596F7 Windowing system distributor 'Microsoft Corp.', version 5.1.2600 Recent messages: For information about GNU Emacs and the GNU system, type C-h C-a. Configured using: 'configure --prefix=/d/usr --with-wide-int --with-modules --enable-checking=yes,glyphs 'CFLAGS=-Og -gdwarf-4 -g3'' Configured features: XPM JPEG TIFF GIF PNG RSVG SOUND NOTIFY ACL GNUTLS LIBXML2 ZLIB TOOLKIT_SCROLL_BARS MODULES LCMS2 Important settings: value of $LANG: ENU locale-coding-system: cp1255 Major mode: Lisp Interaction Minor modes in effect: tooltip-mode: t global-eldoc-mode: t eldoc-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 auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t line-number-mode: t transient-mark-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message rmc puny seq byte-opt gv bytecomp byte-compile cconv cl-loaddefs cl-lib dired dired-loaddefs format-spec rfc822 mml easymenu mml-sec password-cache epa derived epg epg-config gnus-util rmail rmail-loaddefs mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils elec-pair time-date mule-util tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel dos-w32 ls-lisp disp-table term/w32-win w32-win w32-vars term/common-win tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame cl-generic 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 charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray minibuffer cl-preloaded nadvice loaddefs button faces cus-face macroexp files text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote w32notify w32 lcms2 multi-tty make-network-process emacs) Memory information: ((conses 16 100974 11112) (symbols 56 21280 1) (miscs 48 40 107) (strings 16 31517 1999) (string-bytes 1 759703) (vectors 16 14009) (vector-slots 8 645650 16134) (floats 8 51 226) (intervals 40 268 103) (buffers 880 11))
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.