diff --git a/src/evalfunc.c b/src/evalfunc.c
index 6db93b8..6d845c1 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -2323,8 +2323,12 @@
 	}
 	else
 	{
-	    char_u *mesg = tv_get_string_chk(&argvars[0]);
+	    char_u *mesg;
 
+	    if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
+		return;
+
+	    mesg = tv_get_string_chk(&argvars[0]);
 	    if (mesg != NULL)
 		// empty string removes the balloon
 		post_balloon(balloonEval, *mesg == NUL ? NULL : mesg, NULL);
@@ -2338,8 +2342,11 @@
 {
     if (rettv_list_alloc(rettv) == OK)
     {
-	char_u *msg = tv_get_string_chk(&argvars[0]);
+	char_u *msg;
 
+	if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
+	    return;
+	msg = tv_get_string_chk(&argvars[0]);
 	if (msg != NULL)
 	{
 	    pumitem_T	*array;
diff --git a/src/filepath.c b/src/filepath.c
index 2f3b90f..75662b4 100644
--- a/src/filepath.c
+++ b/src/filepath.c
@@ -861,7 +861,7 @@
     void
 f_executable(typval_T *argvars, typval_T *rettv)
 {
-    if (in_vim9script() && check_for_string(&argvars[0], 1) == FAIL)
+    if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
 	return;
 
     // Check in $PATH and also check directly if there is a directory name.
@@ -876,7 +876,7 @@
 {
     char_u *p = NULL;
 
-    if (in_vim9script() && check_for_nonempty_string(&argvars[0], 1) == FAIL)
+    if (in_vim9script() && check_for_nonempty_string_arg(argvars, 0) == FAIL)
 	return;
     (void)mch_can_exe(tv_get_string(&argvars[0]), &p, TRUE);
     rettv->v_type = VAR_STRING;
@@ -893,7 +893,7 @@
     char_u	*p;
     int		n;
 
-    if (in_vim9script() && check_for_string(&argvars[0], 1) == FAIL)
+    if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
 	return;
 #ifndef O_NONBLOCK
 # define O_NONBLOCK 0
@@ -918,7 +918,7 @@
     void
 f_filewritable(typval_T *argvars, typval_T *rettv)
 {
-    if (in_vim9script() && check_for_string(&argvars[0], 1) == FAIL)
+    if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
 	return;
     rettv->vval.v_number = filewritable(tv_get_string(&argvars[0]));
 }
@@ -942,7 +942,7 @@
 
     rettv->vval.v_string = NULL;
     rettv->v_type = VAR_STRING;
-    if (in_vim9script() && check_for_nonempty_string(&argvars[0], 1) == FAIL)
+    if (in_vim9script() && check_for_nonempty_string_arg(argvars, 0) == FAIL)
 	return;
 
 #ifdef FEAT_SEARCHPATH
@@ -1023,8 +1023,8 @@
     char_u	*fbuf = NULL;
     char_u	buf[NUMBUFLEN];
 
-    if (in_vim9script() && (check_for_string(&argvars[0], 1) == FAIL
-	    || check_for_string(&argvars[1], 2) == FAIL))
+    if (in_vim9script() && (check_for_string_arg(argvars, 0) == FAIL
+	    || check_for_string_arg(argvars, 1) == FAIL))
 	return;
     fname = tv_get_string_chk(&argvars[0]);
     mods = tv_get_string_buf_chk(&argvars[1], buf);
@@ -1135,7 +1135,7 @@
     char_u	*perm = NULL;
     char_u	permbuf[] = "---------";
 
-    if (in_vim9script() && check_for_string(&argvars[0], 1) == FAIL)
+    if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
 	return;
     fname = tv_get_string(&argvars[0]);
 
@@ -1154,7 +1154,7 @@
     char_u	*fname;
     stat_T	st;
 
-    if (in_vim9script() && check_for_string(&argvars[0], 1) == FAIL)
+    if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
 	return;
 
     fname = tv_get_string(&argvars[0]);
@@ -1184,7 +1184,7 @@
     char_u	*fname;
     stat_T	st;
 
-    if (in_vim9script() && check_for_string(&argvars[0], 1) == FAIL)
+    if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
 	return;
     fname = tv_get_string(&argvars[0]);
     if (mch_stat((char *)fname, &st) >= 0)
@@ -1230,7 +1230,7 @@
     stat_T	st;
     char_u	*type = NULL;
 
-    if (in_vim9script() && check_for_string(&argvars[0], 1) == FAIL)
+    if (in_vim9script() && check_for_string_arg(argvars, 0) == FAIL)
 	return;
     fname = tv_get_string(&argvars[0]);
 
@@ -2411,9 +2411,9 @@
     int		error = FALSE;
 
     if (in_vim9script()
-	    && (check_for_string(&argvars[1], 2) == FAIL
-		|| check_for_string(&argvars[2], 3) == FAIL
-		|| check_for_string(&argvars[3], 4) == FAIL))
+	    && (check_for_string_arg(argvars, 1) == FAIL
+		|| check_for_string_arg(argvars, 2) == FAIL
+		|| check_for_string_arg(argvars, 3) == FAIL))
 	return;
     save = (int)tv_get_number_chk(&argvars[0], &error);
     title = tv_get_string_chk(&argvars[1]);
diff --git a/src/mbyte.c b/src/mbyte.c
index 33b9ace..079e0d2 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -5551,7 +5551,7 @@
     void
 f_charclass(typval_T *argvars, typval_T *rettv UNUSED)
 {
-    if (check_for_string(&argvars[0], 1) == FAIL)
+    if (check_for_string_arg(argvars, 0) == FAIL)
 	return;
     rettv->vval.v_number = mb_get_class(argvars[0].vval.v_string);
 }
diff --git a/src/proto/typval.pro b/src/proto/typval.pro
index 102821d..ad20f8c 100644
--- a/src/proto/typval.pro
+++ b/src/proto/typval.pro
@@ -9,8 +9,8 @@
 varnumber_T tv_get_bool(typval_T *varp);
 varnumber_T tv_get_bool_chk(typval_T *varp, int *denote);
 float_T tv_get_float(typval_T *varp);
-int check_for_string(typval_T *tv, int arg);
-int check_for_nonempty_string(typval_T *tv, int arg);
+int check_for_string_arg(typval_T *args, int idx);
+int check_for_nonempty_string_arg(typval_T *args, int idx);
 char_u *tv_get_string(typval_T *varp);
 char_u *tv_get_string_strict(typval_T *varp);
 char_u *tv_get_string_buf(typval_T *varp, char_u *buf);
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim
index 25db012..766a5bc 100644
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -125,6 +125,19 @@
   assert_equal(['0', 'one', '1', 'two', '2'], getline(1, 6))
 enddef
 
+def Test_balloon_show()
+  CheckGui
+  CheckFeature balloon_eval
+
+  assert_fails('balloon_show(true)', 'E1174:')
+enddef
+
+def Test_balloon_split()
+  CheckFeature balloon_eval
+
+  assert_fails('balloon_split(true)', 'E1174:')
+enddef
+
 def Test_browse()
   CheckFeature browse
 
@@ -142,9 +155,14 @@
   CheckDefExecAndScriptFailure(lines, 'E1174: String required for argument 4')
 enddef
 
+def Test_bufexists()
+  assert_fails('bufexists(true)', 'E1174')
+enddef
+
 def Test_buflisted()
   var res: bool = buflisted('asdf')
   assert_equal(false, res)
+  assert_fails('buflisted(true)', 'E1174')
 enddef
 
 def Test_bufname()
@@ -176,6 +194,8 @@
   only
   bwipe SomeFile
   bwipe OtherFile
+
+  assert_fails('bufwinid(true)', 'E1138')
 enddef
 
 def Test_call_call()
diff --git a/src/typval.c b/src/typval.c
index 6c4da0c..8030c69 100644
--- a/src/typval.c
+++ b/src/typval.c
@@ -344,12 +344,12 @@
  * Give an error and return FAIL unless "tv" is a string.
  */
     int
-check_for_string(typval_T *tv, int arg)
+check_for_string_arg(typval_T *args, int idx)
 {
-    if (tv->v_type != VAR_STRING)
+    if (args[idx].v_type != VAR_STRING)
     {
-	if (arg > 0)
-	    semsg(_(e_string_required_for_argument_nr), arg);
+	if (idx >= 0)
+	    semsg(_(e_string_required_for_argument_nr), idx + 1);
 	else
 	    emsg(_(e_stringreq));
 	return FAIL;
@@ -358,17 +358,17 @@
 }
 
 /*
- * Give an error and return FAIL unless "tv" is a non-empty string.
+ * Give an error and return FAIL unless "args[idx]" is a non-empty string.
  */
     int
-check_for_nonempty_string(typval_T *tv, int arg)
+check_for_nonempty_string_arg(typval_T *args, int idx)
 {
-    if (check_for_string(tv, arg) == FAIL)
+    if (check_for_string_arg(args, idx) == FAIL)
 	return FAIL;
-    if (tv->vval.v_string == NULL || *tv->vval.v_string == NUL)
+    if (args[idx].vval.v_string == NULL || *args[idx].vval.v_string == NUL)
     {
-	if (arg > 0)
-	    semsg(_(e_non_empty_string_required_for_argument_nr), arg);
+	if (idx >= 0)
+	    semsg(_(e_non_empty_string_required_for_argument_nr), idx + 1);
 	else
 	    emsg(_(e_non_empty_string_required));
 	return FAIL;
diff --git a/src/version.c b/src/version.c
index 2b63d6d..435efeb 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2664,
+/**/
     2663,
 /**/
     2662,
