patch 7.4.2009
Problem:    Messages test fails.
Solution:   Don't set redir_execute before returning.
diff --git a/src/eval.c b/src/eval.c
index ab808b9..3ab8ea4 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -11445,11 +11445,6 @@
 	    return;
     }
 
-    if (redir_execute)
-	save_ga = redir_execute_ga;
-    ga_init2(&redir_execute_ga, (int)sizeof(char), 500);
-    redir_execute = TRUE;
-
     if (argvars[1].v_type != VAR_UNKNOWN)
     {
 	char_u	buf[NUMBUFLEN];
@@ -11468,6 +11463,11 @@
     else
 	++msg_silent;
 
+    if (redir_execute)
+	save_ga = redir_execute_ga;
+    ga_init2(&redir_execute_ga, (int)sizeof(char), 500);
+    redir_execute = TRUE;
+
     if (cmd != NULL)
 	do_cmdline_cmd(cmd);
     else
@@ -21169,8 +21169,8 @@
 
     if (argvars[0].v_type != VAR_NUMBER)
     {
-         EMSG(_(e_number_exp));
-         return;
+	EMSG(_(e_number_exp));
+	return;
     }
     timer = find_timer((int)get_tv_number(&argvars[0]));
     if (timer != NULL)