Hi,

Thank you for your prompt response!

On 3/17/25 7:27 AM, Eli Zaretskii wrote:
Thanks, but I don't have access to a system where these prerequisites
can be met.  So either someone can reproduce this, debug the problem,
and describe the reason for the loop, or I'd need to ask you to do it,
if possible.  Or, if you can show a recipe for reproducing the problem
without installing LaTeX and xenops, I could try reproducing this on
the systems to which I have access.
I suspect that having (multiple) images inline might be the cause of the issue -- do you have any suggestions on how to recreate this in vanilla emacs?
Can you describe how you arrived at the conclusion that it infloops in
that function?  
In gdb, I switched to that frame and typed finish, the process hangs. In any lower frame I can successfully finish.
Can you step in GDB through one iteration of that
loop and show the values of variables which cause Emacs never to exit
the loop?

I am not sure which variables I should show, as I am having some trouble understanding the exit conditions of that infinite loop. Basically `move_it_in_display_line_to` always returns `MOVE_LINE_CONTINUED`, and below is one iteration of stepping through the loop:


10947          switch (skip)
10990          max_current_x = it->last_visible_x;
10995          if (it->c == '\t')
11030            it->continuation_lines_width += it->current_x;
11031          break;
11038          it->current_x = line_start_x;
11039          it->wrap_prefix_width = 0;
11040          line_start_x = 0;
11041          it->hpos = 0;
11042          it->line_number_produced_p = false;
11043          it->current_y += it->max_ascent + it->max_descent;
11044          ++it->vpos;
11045          last_height = it->max_ascent + it->max_descent;
11046          it->max_ascent = it->max_descent = 0;
10759          if (op & MOVE_TO_VPOS)
10803          else if (op & MOVE_TO_Y)
10932          else if (BUFFERP (it->object)
10933               && (it->method == GET_FROM_BUFFER
10934               || it->method == GET_FROM_STRETCH)
10945        skip = move_it_in_display_line_to (it, to_charpos, -1, MOVE_TO_POS);
10947          switch (skip)



      
#1  0x0000555555622e6c in move_it_to (it=0x7fffffff6df0, to_charpos=218, 
to_x=-1, to_y=-1, to_vpos=-1, op=8) at xdisp.c:10945
The downstream bug report shows a very different (much larger) buffer
position as the value of to_charpos (34559).  Is that expected? is
that significant?

Great catch -- the much larger buffer position might be because I was (incorrectly) working with a larger document. I would say that it is not significant, as I could reproduce the issue with a much smaller document.