Subject: bug#28710: 27.0.50; eassert failure in maybe_produce_line_number

From: Eli Zaretskii <[email-masked]>
Date: Sun, 08 Oct 2017 22:50:45 +0300

> From: Alex <[email-masked]>
> Cc: [email-masked]
> Date: Sun, 08 Oct 2017 13:05:45 -0600
> 
> The return value appears to be true. The breakpoint does trigger right
> after, and enabled_p is also true:
> 
> Thread 1 "emacs" hit Hardware watchpoint 4: -location $1->desired_matrix->rows->enabled_p
> 
> Old value = false
> New value = true
> prepare_desired_row (w=0x1695d60 <bss_sbrk_buffer+8894272>, row=0x4182860, 
>     mode_line_p=true) at dispnew.c:1076
> 1076	      row->reversed_p = rp;
> (gdb) c
> Continuing.
> 
> Thread 1 "emacs" hit Hardware watchpoint 4: -location $1->desired_matrix->rows->enabled_p
> 
> Old value = true
> New value = false
> clear_glyph_matrix_rows (matrix=0x3f524f0, start=0, end=37) at dispnew.c:693
> 693	  for (; start < end; ++start)
> (gdb) c
> Continuing.
> 
> Thread 1 "emacs" hit Hardware watchpoint 4: -location $1->desired_matrix->rows->enabled_p
> 
> Old value = false
> New value = true
> prepare_desired_row (w=0x1695d60 <bss_sbrk_buffer+8894272>, row=0x4182860, 
>     mode_line_p=false) at dispnew.c:1076
> 1076	      row->reversed_p = rp;
> (gdb) break xdisp.c:17039
> Breakpoint 5 at 0x474844: file xdisp.c, line 17039.
> (gdb) commands
> Type commands for breakpoint(s) 5, one per line.
> End with a line saying just "end".
> >p w->desired_matrix->rows->enabled_p
> >end
> (gdb) finish
> Run till exit from #0  prepare_desired_row (
>     w=0x1695d60 <bss_sbrk_buffer+8894272>, row=0x4182860, mode_line_p=false)
>     at dispnew.c:1076
> display_line (it=0x7ffefb255dc0, cursor_vpos=25) at xdisp.c:21208
> warning: Source file is more recent than executable.
> 21208	  row->y = it->current_y;
> (gdb) finish
> Run till exit from #0  display_line (it=0x7ffefb255dc0, cursor_vpos=25)
>     at xdisp.c:21208
> 0x0000000000477380 in try_window (window=XIL(0x1695d65), pos=..., flags=1)
>     at xdisp.c:17592
> 17592	      if (display_line (&it, cursor_vpos))
> Value returned is $2 = true
> (gdb) finish
> Run till exit from #0  0x0000000000477380 in try_window (
>     window=XIL(0x1695d65), pos=..., flags=1) at xdisp.c:17592
> 0x0000000000474866 in redisplay_window (window=XIL(0x1695d65), 
>     just_this_one_p=false) at xdisp.c:17039
> 17039		  if (try_window (window, startp, TRY_WINDOW_CHECK_MARGINS) < 0)
> Value returned is $3 = 1
> (gdb) continue
> Continuing.
> 
> Thread 1 "emacs" hit Breakpoint 5, redisplay_window (window=XIL(0x1695d65), just_this_one_p=false) at xdisp.c:17039
> 17039		  if (try_window (window, startp, TRY_WINDOW_CHECK_MARGINS) < 0)
> $4 = true
> (gdb) p w->desired_matrix->rows->enabled_p
> $5 = true

OK, so we need to understand the path the code takes after try_window
returns the value 1.  This means, after typing "finish" 3 times, type
"next", then continue pressing RET until redisplay_window returns.  I
need to see the path through the code until we exit redisplay_window
to understand where to put the missing call to clear_glyph_matrix.

Also, please recompile Emacs because:

> warning: Source file is more recent than executable.

Thanks.

> Have you tried using MELPA[1] to install magit? Maybe that would
> work.

I'm not sure how will this help.  I don't want to install Magit, I
just use it from a directory where I unzipped its snapshot.  How using
MELPA would change that?