{
while (pos == next_boundary)
{
+ int newpos;
+
/* If the caller says that the screen position came from an earlier
call to compute_motion, then we've already accounted for the
overlay strings at point. This is only true the first time
(but not necessarily all that there are here),
and store in next_boundary the next position where
we need to call skip_invisible. */
- pos = skip_invisible (pos, &next_boundary, to, window);
+ newpos = skip_invisible (pos, &next_boundary, to, window);
+
+ if (newpos >= to)
+ goto after_loop;
+
+ pos = newpos;
}
/* Handle right margin. */
}
}
+ after_loop:
+
/* Remember any final width run in the cache. */
if (current_buffer->width_run_cache
&& width_run_width == 1