Subject: bug#11417: 24.0.96; infinite looping in xdisp.c

From: Eli Zaretskii <[email-masked]>
Date: Sun, 06 May 2012 19:18:45 +0300

> From: Leo <[email-masked]>
> Date: Sun, 06 May 2012 12:24:34 +0800
> 
> I have yet to find a minimal example to reproduce this. I know the
> following few facts. It must be run under tty and seems to related to
> overlays. It was triggered by flymake in some python files. The contents
> of those files are only partly displayed by Emacs (see screenshots
> attached). My Emacs was built on 2012-04-28.

>From which branch did you build your Emacs?  Trunk or emacs-24?

> Run till exit from #0  0x000000010003d316 in move_it_in_display_line_to (it=0x7fff5fbfb248, to_charpos=411, to_x=-1, op=12) at xdisp.c:7990
> 0x000000010003f702 in move_it_to (it=0x7fff5fbfb248, to_charpos=411, to_x=-1, to_y=-1, to_vpos=1, op=12) at xdisp.c:8536
> 8536		      skip = move_it_in_display_line_to (it, to_charpos, to_x, op);
> Value returned is $2 = MOVE_POS_MATCH_OR_ZV
> (gdb) 
> Run till exit from #0  0x000000010003f702 in move_it_to (it=0x7fff5fbfb248, to_charpos=411, to_x=-1, to_y=-1, to_vpos=1, op=12) at xdisp.c:8536
> move_it_vertically_backward (it=0x7fff5fbfce20, dy=0) at xdisp.c:8816
> 8816		       && SREF (it2.string, IT_STRING_BYTEPOS (it2) - 1) == '\n')));
> (gdb) next
> 8804	      move_it_to (&it2, start_pos, -1, -1, it2.vpos + 1,
> (gdb) 
> 8816		       && SREF (it2.string, IT_STRING_BYTEPOS (it2) - 1) == '\n')));
> (gdb) 
> 8804	      move_it_to (&it2, start_pos, -1, -1, it2.vpos + 1,
> (gdb) 
> 8816		       && SREF (it2.string, IT_STRING_BYTEPOS (it2) - 1) == '\n')));
> (gdb) 
> 8804	      move_it_to (&it2, start_pos, -1, -1, it2.vpos + 1,
> (gdb) 
> 8816		       && SREF (it2.string, IT_STRING_BYTEPOS (it2) - 1) == '\n')));
> (gdb) 
> 8804	      move_it_to (&it2, start_pos, -1, -1, it2.vpos + 1,
> (gdb) 
> 8816		       && SREF (it2.string, IT_STRING_BYTEPOS (it2) - 1) == '\n')));

First, please provide the entire backtrace from here to main, and also
the Lisp backtrace (from the "xbacktrace" command).  You will need to
make sure GDB reads the src/.gdbinit file for "xbacktrace" to work,
and also for several other commands below.

Second, I need to see some of the variables involved in this:

 (gdb) p start_pos
 (gdb) p it2.vpos
 (gdb) p it2.current
 (gdb) p it2.string
 (gdb) xtype
 (gdb) p it2.method

Finally, can you describe what should be displayed on the portion of
the screen that is around the character position (shown by "p it2.current"
above) where Emacs loops?  The following command should display
detailed information about the screen line that includes the above buffer
position:

 (gdb) pgrowx (it2.w->desired_matrix->rows+N)

where N is the zero-based number of the screen line.  If you cannot
easily figure out the value of N, try the above command for successive
values starting from zero, until you see the first screen line that is
not displayed.

Thanks.