Subject: Re: bug#35273: "Marker does not point anywhere" when reading next article

From: Leah Neukirchen <[email-masked]>
Date: Tue, 16 Apr 2019 15:21:12 +0200

Noam Postavsky <[email-masked]> writes:

> Leah Neukirchen <[email-masked]> writes:
>
>>> If you can reproduce it reliably, setting (setq debug-on-signal t) just
>>> before might help get a backtrace.
>>>
>>> If that also doesn't work you could record the backtrace from a
>>> signal-hook-function:
>>>
>>>     (defvar bug-35273-last-backtrace nil)
>>>     (defun bug-35273-record-backtrace (err data)[...]
>
>>>     (setq signal-hook-function #'bug-35273-record-backtrace)
>>
>> These do not work for some reason...
>
> debug-on-signal doesn't work because the debugger is suppressed during
> redisplay (to avoid recursion).  I think the signal-hook-function might
> have worked (though I forgot to tell you to check the value of
> bug-35273-last-backtrace afterwards) but it would only have a single
> frame of "redisplay" so it would be useless.

(It was nil.)

>>> Or if you can run under gdb, just set a breakpoint in the C code where
>>> that error is raised.
>>
>> On 27.0.50 (05d53d888):
>>
>> Breakpoint 1, marker_position (marker=0x555557d6feb5) at marker.c:680
>> 680	    error ("Marker does not point anywhere");
>> (gdb) bt
>> #0  marker_position (marker=0x555557d6feb5) at marker.c:680
>> #1  0x000055555567935e in mouse_face_overlay_overlaps (overlay=0x555557d6ff15)
>>     at lisp.h:2624
>> #2  0x00005555555d395f in note_mouse_highlight (f=f@entry=0x555556001d70, 
>>     x=<optimized out>, y=<optimized out>) at xdisp.c:31836
>
> The xdisp.c:31836 at revision 05d53d888 has
>
> 		help_echo_pos = charpos;
>
> And neither note_mouse_highlight nor mouse_face_overlay_overlaps call
> marker_position, so I'm confused how we got there.  note_mouse_highlight
> does call Fmarker_position, but that one doesn't signal an error.
>
> Maybe the debug info is messed up by optimization.  Could you try
> recompiling with CFLAGS='-O0 -g3'?

(gdb) bt
#0  marker_position (marker=XIL(0x5555578a47c5)) at marker.c:680
#1  0x00005555556fc2dd in mouse_face_overlay_overlaps (
    overlay=XIL(0x5555578a4825)) at buffer.c:3047
#2  0x0000555555606f5f in note_mouse_highlight (f=0x55555610dbf0, x=100, y=9)
    at xdisp.c:31631
#3  0x0000555555691622 in XTframe_up_to_date (f=0x55555610dbf0) at xterm.c:1280
#4  0x00005555555d0714 in redisplay_internal () at xdisp.c:14523
#5  0x00005555555d0e38 in redisplay_preserve_echo_area (from_where=5)
    at xdisp.c:14759
#6  0x00005555556d0c56 in read_char (commandflag=1, map=XIL(0x555557e1d043), 
    prev_event=XIL(0), used_mouse_menu=0x7fffffffdeb5, end_time=0x0)
    at keyboard.c:2474
#7  0x00005555556de5dd in read_key_sequence (keybuf=0x7fffffffe0c0, 
    prompt=XIL(0), dont_downcase_last=false, can_return_switch_frame=true, 
    fix_current_buffer=true, prevent_redisplay=false) at keyboard.c:9111
#8  0x00005555556cddd9 in command_loop_1 () at keyboard.c:1350
#9  0x0000555555780598 in internal_condition_case (
    bfun=0x5555556cd991 <command_loop_1>, handlers=XIL(0x5010), 
    hfun=0x5555556cd146 <cmd_error>) at eval.c:1352
#10 0x00005555556cd679 in command_loop_2 (ignore=XIL(0)) at keyboard.c:1091
#11 0x000055555577fe1a in internal_catch (tag=XIL(0xc5d0), 
    func=0x5555556cd64c <command_loop_2>, arg=XIL(0)) at eval.c:1115
#12 0x00005555556cd617 in command_loop () at keyboard.c:1070
#13 0x00005555556ccd15 in recursive_edit_1 () at keyboard.c:714
#14 0x00005555556cce99 in Frecursive_edit () at keyboard.c:786
#15 0x00005555556cacbc in main (argc=1, argv=0x7fffffffe538) at emacs.c:1963

Lisp Backtrace:
"redisplay_internal (C function)" (0x0)

(gdb) up
#1  0x00005555556fc2dd in mouse_face_overlay_overlaps (
    overlay=XIL(0x5555578a4825)) at buffer.c:3047
3047	  ptrdiff_t start = OVERLAY_POSITION (OVERLAY_START (overlay));
(gdb) l
3042	   `mouse-face' property overlapping OVERLAY.  */
3043	
3044	bool
3045	mouse_face_overlay_overlaps (Lisp_Object overlay)
3046	{
3047	  ptrdiff_t start = OVERLAY_POSITION (OVERLAY_START (overlay));
3048	  ptrdiff_t end = OVERLAY_POSITION (OVERLAY_END (overlay));
3049	  ptrdiff_t n, i, size;
3050	  Lisp_Object *v, tem;
3051	  Lisp_Object vbuf[10];
(gdb) up
#2  0x0000555555606f5f in note_mouse_highlight (f=0x55555610dbf0, x=100, y=9)
    at xdisp.c:31631
31631		      && mouse_face_overlay_overlaps (hlinfo->mouse_face_overlay)))
(gdb) l
31626		     if we enter the overlapping overlay, and then highlight
31627		     only that.  Skip the check when mouse-face highlighting
31628		     is currently hidden to avoid Bug#30519.  */
31629		  || (!hlinfo->mouse_face_hidden
31630		      && OVERLAYP (hlinfo->mouse_face_overlay)
31631		      && mouse_face_overlay_overlaps (hlinfo->mouse_face_overlay)))
31632		{
31633		  /* Find the highest priority overlay with a mouse-face.  */
31634		  Lisp_Object overlay = Qnil;
31635		  for (i = noverlays - 1; i >= 0 && NILP (overlay); --i)

-- 
Leah Neukirchen  <[email-masked]>  http://leah.zone