updated for version 7.4.327
Problem:    When 'verbose' is set to display the return value of a function,
            may get E724 repeatedly.
Solution:   Do not give an error for verbose messages. Abort conversion to
            string after an error.
diff --git a/src/eval.c b/src/eval.c
index 728b7d1..a350757 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -134,6 +134,9 @@
 #define COPYID_INC 2
 #define COPYID_MASK (~0x1)
 
+/* Abort conversion to string after a recursion error. */
+static int  did_echo_string_emsg = FALSE;
+
 /*
  * Array to hold the hashtab with variables local to each sourced script.
  * Each item holds a variable (nameless) that points to the dict_T.
@@ -6686,6 +6689,8 @@
 	}
 
 	line_breakcheck();
+	if (did_echo_string_emsg)  /* recursion error, bail out */
+	    break;
     }
 
     /* Allocate result buffer with its total size, avoid re-allocation and
@@ -7460,8 +7465,10 @@
 	    if (s != NULL)
 		ga_concat(&ga, s);
 	    vim_free(tofree);
-	    if (s == NULL)
+	    if (s == NULL || did_echo_string_emsg)
 		break;
+	    line_breakcheck();
+
 	}
     }
     if (todo > 0)
@@ -7619,9 +7626,16 @@
 
     if (recurse >= DICT_MAXNEST)
     {
-	EMSG(_("E724: variable nested too deep for displaying"));
+	if (!did_echo_string_emsg)
+	{
+	    /* Only give this message once for a recursive call to avoid
+	     * flooding the user with errors.  And stop iterating over lists
+	     * and dicts. */
+	    did_echo_string_emsg = TRUE;
+	    EMSG(_("E724: variable nested too deep for displaying"));
+	}
 	*tofree = NULL;
-	return NULL;
+	return (char_u *)"{E724}";
     }
     ++recurse;
 
@@ -7689,7 +7703,8 @@
 	    *tofree = NULL;
     }
 
-    --recurse;
+    if (--recurse == 0)
+	did_echo_string_emsg = FALSE;
     return r;
 }
 
@@ -23303,7 +23318,10 @@
 			msg_outnum((long)argvars[i].vval.v_number);
 		    else
 		    {
+			/* Do not want errors such as E724 here. */
+			++emsg_off;
 			s = tv2string(&argvars[i], &tofree, numbuf2, 0);
+			--emsg_off;
 			if (s != NULL)
 			{
 			    if (vim_strsize(s) > MSG_BUF_CLEN)
@@ -23395,8 +23413,10 @@
 
 	    /* The value may be very long.  Skip the middle part, so that we
 	     * have some idea how it starts and ends. smsg() would always
-	     * truncate it at the end. */
+	     * truncate it at the end. Don't want errors such as E724 here. */
+	    ++emsg_off;
 	    s = tv2string(fc->rettv, &tofree, numbuf2, 0);
+	    --emsg_off;
 	    if (s != NULL)
 	    {
 		if (vim_strsize(s) > MSG_BUF_CLEN)
diff --git a/src/version.c b/src/version.c
index 6cc3d07..9215ae4 100644
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    327,
+/**/
     326,
 /**/
     325,