From: Eli Zaretskii Date: Mon, 14 Nov 2011 20:15:38 +0000 (+0200) Subject: Fix bug #10035 with assertion violation in row_equal_p. X-Git-Tag: emacs-pretest-24.0.92~189 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=322ad6ec0e773dffefad12df88c98041ca35b427;p=emacs.git Fix bug #10035 with assertion violation in row_equal_p. src/xdisp.c (display_line): Move the call to highlight_trailing_whitespace before the call to compute_line_metrics, since the latter needs to see the final faces of all the glyphs to compute ROW's hash value. Fixes assertion violations in row_equal_p. --- diff --git a/src/ChangeLog b/src/ChangeLog index 3e2ebaa0efc..3c93caec5d8 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2011-11-14 Eli Zaretskii + + * xdisp.c (display_line): Move the call to + highlight_trailing_whitespace before the call to + compute_line_metrics, since the latter needs to see the final + faces of all the glyphs to compute ROW's hash value. Fixes + assertion violations in row_equal_p. (Bug#10035) + 2011-11-14 Juanma Barranquero * w32proc.c (reader_thread): Don't check pending input if cp->fd < 0, diff --git a/src/xdisp.c b/src/xdisp.c index efe7a6c9d00..6129c5e566f 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -19382,9 +19382,18 @@ display_line (struct it *it) overlay_arrow_seen = 1; } + /* Highlight trailing whitespace. */ + if (!NILP (Vshow_trailing_whitespace)) + highlight_trailing_whitespace (it->f, it->glyph_row); + /* Compute pixel dimensions of this line. */ compute_line_metrics (it); + /* Implementation note: No changes in the glyphs of ROW or in their + faces can be done past this point, because compute_line_metrics + computes ROW's hash value and stores it within the glyph_row + structure. */ + /* Record whether this row ends inside an ellipsis. */ row->ends_in_ellipsis_p = (it->method == GET_FROM_DISPLAY_VECTOR @@ -19419,10 +19428,6 @@ display_line (struct it *it) && cursor_row_p (row)) set_cursor_from_row (it->w, row, it->w->desired_matrix, 0, 0, 0, 0); - /* Highlight trailing whitespace. */ - if (!NILP (Vshow_trailing_whitespace)) - highlight_trailing_whitespace (it->f, it->glyph_row); - /* Prepare for the next line. This line starts horizontally at (X HPOS) = (0 0). Vertical positions are incremented. As a convenience for the caller, IT->glyph_row is set to the next