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.
View this message in rfc822 format
From: help-debbugs <at> gnu.org (GNU bug Tracking System) To: Eli Zaretskii <eliz <at> gnu.org> Subject: bug#28850: closed (Re: 26.0.90; Error running timer 'jit-lock-stealth-fontify': (error "Invalid search bound (wrong side of point)")) Date: Thu, 26 Oct 2017 18:43:02 +0000
[Message part 1 (text/plain, inline)]
Your bug report #28850: 26.0.90; Error running timer 'jit-lock-stealth-fontify': (error "Invalid search bound (wrong side of point)") which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 28850 <at> debbugs.gnu.org. -- 28850: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=28850 GNU Bug Tracking System Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Alan Mackenzie <acm <at> muc.de> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 28850-done <at> debbugs.gnu.org Subject: Re: 26.0.90; Error running timer 'jit-lock-stealth-fontify': (error "Invalid search bound (wrong side of point)") Date: Thu, 26 Oct 2017 18:36:37 +0000Hello, Eli. On Thu, Oct 26, 2017 at 19:44:28 +0300, Eli Zaretskii wrote: > > Date: Wed, 25 Oct 2017 19:11:37 +0000 > > Cc: 28850 <at> debbugs.gnu.org > > From: Alan Mackenzie <acm <at> muc.de> > > Actually, it wasn't that difficult to amend that form generator. Would > > you please try out the patch below, which should apply cleanly to > > master. > I think you've solved the problem, .... It was definitely a joint effort. :-) > .... because I let Emacs run idle for 10 hours, and it didn't hit this > error even once. > Thanks. Please push to the release branch. DONE. I'm closing the bug with this post. -- Alan Mackenzie (Nuremberg, Germany).
[Message part 3 (message/rfc822, inline)]
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 +0300This 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.