Subject: bug#22323: Font fallback causes inconsistent stacking of faces in overlays with invisible property

From: Eli Zaretskii <[email-masked]>
Date: Thu, 07 Jan 2016 20:22:44 +0200

> From: Clément Pit--Claudel <[email-masked]>
> Date: Thu, 7 Jan 2016 11:52:55 -0500
> 
> Font fallback seems to break face stacking for invisible overlays:
> 
> This works fine:
> 
> (with-current-buffer (get-buffer-create "No prettification: ellispis is highlighed")
>   (erase-buffer)
>   (fundamental-mode)
>   (add-to-invisibility-spec '(outline . t))
>   (insert "abc!!def!!ghi")
>   (let ((ov (make-overlay 6 9)))
>     (overlay-put ov 'invisible 'outline))
>   (let ((ov (make-overlay (point-min) (point-max))))
>     (overlay-put ov 'face 'region))
>   (pop-to-buffer (current-buffer)))
> 
> This doesn't work (assuming that ℙ is not in your usual font):
> 
> (with-current-buffer (get-buffer-create "No prettification: ellispis is highlighed")
>   (erase-buffer)
>   (fundamental-mode)
>   (add-to-invisibility-spec '(outline . t))
>   (insert "abcℙℙdefℙℙghi")
>   (let ((ov (make-overlay 6 9)))
>     (overlay-put ov 'invisible 'outline))
>   (let ((ov (make-overlay (point-min) (point-max))))
>     (overlay-put ov 'face 'region))
>   (pop-to-buffer (current-buffer)))

This is indeed the same issue as bug#22320.  Using a different font
requires a different face, so you have here exactly the same situation
as in #22320: the last visible character ℙ has a face that is
different from the first invisible character d.