updated for version 7.0131
diff --git a/src/screen.c b/src/screen.c
index 6562d65..b3dbe01 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -2594,7 +2594,7 @@
     extra_check = 0;
 #endif
 #ifdef FEAT_SYN_HL
-    if (syntax_present(wp->w_buffer))
+    if (syntax_present(wp->w_buffer) && !wp->w_buffer->b_syn_error)
     {
 	/* Prepare for syntax highlighting in this line.  When there is an
 	 * error, stop syntax highlighting. */
@@ -2602,7 +2602,7 @@
 	did_emsg = FALSE;
 	syntax_start(wp, lnum);
 	if (did_emsg)
-	    syntax_clear(wp->w_buffer);
+	    wp->w_buffer->b_syn_error = TRUE;
 	else
 	{
 	    did_emsg = save_did_emsg;
@@ -3643,7 +3643,10 @@
 					       has_spell ? &can_spell : NULL);
 
 		    if (did_emsg)
-			syntax_clear(wp->w_buffer);
+		    {
+			wp->w_buffer->b_syn_error = TRUE;
+			has_syntax = FALSE;
+		    }
 		    else
 			did_emsg = save_did_emsg;