diff --git a/src/eval.c b/src/eval.c
--- a/src/eval.c
+++ b/src/eval.c
@@ -12928,6 +12928,9 @@
 		getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
 				  xp_type, xp_arg);
 
+	if (rettv->vval.v_string == NULL && argvars[2].v_type != VAR_UNKNOWN)
+	    rettv->vval.v_string = vim_strsave(get_tv_string_buf(&argvars[2], buf));
+
 	vim_free(xp_arg);
 
 	/* since the user typed this, no need to wait for return */
@@ -12985,11 +12988,11 @@
 	    else
 		rettv->vval.v_string = NULL;
 	}
-	rettv->v_type = VAR_STRING;
     }
     else
 #endif
 	get_user_input(argvars, rettv, TRUE);
+    rettv->v_type = VAR_STRING;
 }
 
 /*
