patch 8.0.1220: skipping empty statusline groups is not correct

Problem:    Skipping empty statusline groups is not correct.
Solution:   Also set group_end_userhl. (itchyny)
diff --git a/src/buffer.c b/src/buffer.c
index 0d69b9d..dad9103 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -4028,9 +4028,14 @@
 		/* remove group if all items are empty and highlight group
 		 * doesn't change */
 		group_start_userhl = group_end_userhl = 0;
-		for (n = 0; n < groupitem[groupdepth]; n++)
+		for (n = groupitem[groupdepth] - 1; n >= 0; n--)
+		{
 		    if (item[n].type == Highlight)
-			group_start_userhl = item[n].minwid;
+		    {
+			group_start_userhl = group_end_userhl = item[n].minwid;
+			break;
+		    }
+		}
 		for (n = groupitem[groupdepth] + 1; n < curitem; n++)
 		{
 		    if (item[n].type == Normal)
diff --git a/src/testdir/test_statusline.vim b/src/testdir/test_statusline.vim
index de943f2..eafbecd 100644
--- a/src/testdir/test_statusline.vim
+++ b/src/testdir/test_statusline.vim
@@ -312,6 +312,12 @@
   call assert_equal(sa1, sa3)
   call assert_equal(sa1, sa4)
 
+  let g:a = ''
+  set statusline=%#Error#{%(\ %{g:a}\ %)}
+  call assert_match('^{}\s*$', s:get_statusline())
+  let g:a = 'X'
+  call assert_match('^{ X }\s*$', s:get_statusline())
+
   " %%: a percent sign.
   set statusline=10%%
   call assert_match('^10%\s*$', s:get_statusline())
diff --git a/src/version.c b/src/version.c
index 7f72146..a3b48b5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -762,6 +762,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1220,
+/**/
     1219,
 /**/
     1218,