diff --git a/src/evalvars.c b/src/evalvars.c
index 3d03ed8..f2128a6 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -2534,7 +2534,7 @@
     }
     else
     {
-	p = vim_strnsave(name, (int)len);
+	p = vim_strnsave(name, len);
 	if (p == NULL)
 	    return NULL;
     }
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 2280fcf..11894f6 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -3221,7 +3221,7 @@
 	    p = vim_strchr(eap->nextcmd, NL);
 	    if (p == NULL)
 		p = eap->nextcmd + STRLEN(eap->nextcmd);
-	    theline = vim_strnsave(eap->nextcmd, (int)(p - eap->nextcmd));
+	    theline = vim_strnsave(eap->nextcmd, p - eap->nextcmd);
 	    if (*p != NUL)
 		++p;
 	    eap->nextcmd = p;
diff --git a/src/ex_eval.c b/src/ex_eval.c
index 68207cb..a13f844 100644
--- a/src/ex_eval.c
+++ b/src/ex_eval.c
@@ -439,7 +439,7 @@
 	{
 	    cmdlen = (int)STRLEN(cmdname);
 	    ret = (char *)vim_strnsave((char_u *)"Vim(",
-					   4 + cmdlen + 2 + (int)STRLEN(mesg));
+						4 + cmdlen + 2 + STRLEN(mesg));
 	    if (ret == NULL)
 		return ret;
 	    STRCPY(&ret[4], cmdname);
@@ -448,7 +448,7 @@
 	}
 	else
 	{
-	    ret = (char *)vim_strnsave((char_u *)"Vim:", 4 + (int)STRLEN(mesg));
+	    ret = (char *)vim_strnsave((char_u *)"Vim:", 4 + STRLEN(mesg));
 	    if (ret == NULL)
 		return ret;
 	    val = ret + 4;
@@ -806,7 +806,7 @@
 	    if (pending & CSTP_THROW)
 	    {
 		vim_snprintf((char *)IObuff, IOSIZE, mesg, _("Exception"));
-		mesg = (char *)vim_strnsave(IObuff, (int)STRLEN(IObuff) + 4);
+		mesg = (char *)vim_strnsave(IObuff, STRLEN(IObuff) + 4);
 		STRCAT(mesg, ": %s");
 		s = (char *)((except_T *)value)->value;
 	    }
diff --git a/src/fileio.c b/src/fileio.c
index 3896ba8..7b60529 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -2724,7 +2724,7 @@
     }
     else
     {
-	r = vim_strnsave(*pp, (int)(p - *pp));
+	r = vim_strnsave(*pp, p - *pp);
 	*pp = p + 1;
 	if (r != NULL)
 	{
diff --git a/src/filepath.c b/src/filepath.c
index 4a4948a..90d04cf 100644
--- a/src/filepath.c
+++ b/src/filepath.c
@@ -389,7 +389,7 @@
 	if (mch_isdir(*fnamep))
 	{
 	    // Make room for one or two extra characters.
-	    *fnamep = vim_strnsave(*fnamep, (int)STRLEN(*fnamep) + 2);
+	    *fnamep = vim_strnsave(*fnamep, STRLEN(*fnamep) + 2);
 	    vim_free(*bufp);	// free any allocated file name
 	    *bufp = *fnamep;
 	    if (*fnamep == NULL)
@@ -655,7 +655,7 @@
 	    p = vim_strchr(s, sep);
 	    if (p != NULL)
 	    {
-		pat = vim_strnsave(s, (int)(p - s));
+		pat = vim_strnsave(s, p - s);
 		if (pat != NULL)
 		{
 		    s = p + 1;
@@ -663,7 +663,7 @@
 		    p = vim_strchr(s, sep);
 		    if (p != NULL)
 		    {
-			sub = vim_strnsave(s, (int)(p - s));
+			sub = vim_strnsave(s, p - s);
 			str = vim_strnsave(*fnamep, *fnamelen);
 			if (sub != NULL && str != NULL)
 			{
@@ -1296,7 +1296,7 @@
 	return OK;
 
     // If the directory exists we're done.  Otherwise: create it.
-    updir = vim_strnsave(dir, (int)(p - dir));
+    updir = vim_strnsave(dir, p - dir);
     if (updir == NULL)
 	return FAIL;
     if (mch_isdir(updir))
@@ -1594,7 +1594,7 @@
 			    --prevlen;
 		}
 		if (prevlen == 0)
-		    s = vim_strnsave(start, (int)len);
+		    s = vim_strnsave(start, len);
 		else
 		{
 		    // Change "prev" buffer to be the right size.  This way
@@ -3037,7 +3037,7 @@
     int		i;
 
     // Create the command: lop off the backticks.
-    cmd = vim_strnsave(pat + 1, (int)STRLEN(pat) - 2);
+    cmd = vim_strnsave(pat + 1, STRLEN(pat) - 2);
     if (cmd == NULL)
 	return -1;
 
diff --git a/src/findfile.c b/src/findfile.c
index a6bec97..2139d8b 100644
--- a/src/findfile.c
+++ b/src/findfile.c
@@ -451,7 +451,7 @@
 		if (walker)
 		{
 		    search_ctx->ffsc_stopdirs_v[dircount-1] =
-				 vim_strnsave(helper, (int)(walker - helper));
+					 vim_strnsave(helper, walker - helper);
 		    walker++;
 		}
 		else
@@ -484,7 +484,7 @@
 	char	*errpt;
 
 	// save the fix part of the path
-	search_ctx->ffsc_fix_path = vim_strnsave(path, (int)(wc_part - path));
+	search_ctx->ffsc_fix_path = vim_strnsave(path, wc_part - path);
 
 	/*
 	 * copy wc_path and add restricts to the '**' wildcard.
diff --git a/src/highlight.c b/src/highlight.c
index 5d123ac..dacce5c 100644
--- a/src/highlight.c
+++ b/src/highlight.c
@@ -963,7 +963,7 @@
 	    break;
 	}
 	vim_free(arg);
-	arg = vim_strnsave(arg_start, (int)(linep - arg_start));
+	arg = vim_strnsave(arg_start, linep - arg_start);
 	if (arg == NULL)
 	{
 	    error = TRUE;
@@ -5003,7 +5003,7 @@
     {
 	p = skiptowhite(eap->arg);
 	if (!eap->skip)
-	    g = vim_strnsave(eap->arg, (int)(p - eap->arg));
+	    g = vim_strnsave(eap->arg, p - eap->arg);
 	p = skipwhite(p);
 	if (*p == NUL)
 	{
diff --git a/src/if_perl.xs b/src/if_perl.xs
index ef02730..9a99fc0 100644
--- a/src/if_perl.xs
+++ b/src/if_perl.xs
@@ -1435,7 +1435,7 @@
     char_u *str;
     PerlIOVim * s = PerlIOSelf(f, PerlIOVim);
 
-    str = vim_strnsave((char_u *)vbuf, (int)count);
+    str = vim_strnsave((char_u *)vbuf, count);
     if (str == NULL)
 	return 0;
     msg_split((char_u *)str, s->attr);
diff --git a/src/if_ruby.c b/src/if_ruby.c
index 2480ee4..692af4c 100644
--- a/src/if_ruby.c
+++ b/src/if_ruby.c
@@ -1858,7 +1858,7 @@
 
 		rettv->v_type = VAR_STRING;
 		rettv->vval.v_string = vim_strnsave((char_u *)RSTRING_PTR(str),
-							 (int)RSTRING_LEN(str));
+							     RSTRING_LEN(str));
 	    }
 	    break;
 	case T_ARRAY:
diff --git a/src/insexpand.c b/src/insexpand.c
index 6963baf..03dddc3 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -1579,7 +1579,7 @@
 	ins_compl_restart();
 
     vim_free(compl_leader);
-    compl_leader = vim_strnsave(line + compl_col, (int)(p - line) - compl_col);
+    compl_leader = vim_strnsave(line + compl_col, (p - line) - compl_col);
     if (compl_leader != NULL)
     {
 	ins_compl_new_leader();
@@ -1706,7 +1706,7 @@
     {
 	vim_free(compl_leader);
 	compl_leader = vim_strnsave(ml_get_curline() + compl_col,
-				     (int)(curwin->w_cursor.col - compl_col));
+					     curwin->w_cursor.col - compl_col);
 	if (compl_leader != NULL)
 	    ins_compl_new_leader();
     }
diff --git a/src/json.c b/src/json.c
index 2720abf..8eb6680 100644
--- a/src/json.c
+++ b/src/json.c
@@ -662,7 +662,7 @@
 	    if (cur_item != NULL)
 	    {
 		cur_item->v_type = VAR_STRING;
-		cur_item->vval.v_string = vim_strnsave(key, (int)(p - key));
+		cur_item->vval.v_string = vim_strnsave(key, p - key);
 		top_item->jd_key = cur_item->vval.v_string;
 	    }
 	    reader->js_used += (int)(p - key);
diff --git a/src/mark.c b/src/mark.c
index 298da67..948a182 100644
--- a/src/mark.c
+++ b/src/mark.c
@@ -680,7 +680,7 @@
     if (mp->lnum == 0 || mp->lnum > curbuf->b_ml.ml_line_count)
 	return vim_strsave((char_u *)"-invalid-");
     // Allow for up to 5 bytes per character.
-    s = vim_strnsave(skipwhite(ml_get(mp->lnum)), (int)Columns * 5);
+    s = vim_strnsave(skipwhite(ml_get(mp->lnum)), Columns * 5);
     if (s == NULL)
 	return NULL;
     // Truncate the line to fit it in the window.
diff --git a/src/memline.c b/src/memline.c
index 73db42f..347b44d 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -1375,7 +1375,7 @@
 #endif
 	for (p = b0p->b0_fname + fnsize; p > b0p->b0_fname && p[-1] != NUL; --p)
 	    ;
-	b0_fenc = vim_strnsave(p, (int)(b0p->b0_fname + fnsize - p));
+	b0_fenc = vim_strnsave(p, b0p->b0_fname + fnsize - p);
     }
 
     mf_put(mfp, hp, FALSE, FALSE);	// release block 0
diff --git a/src/menu.c b/src/menu.c
index b017925..8a69edd 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -1810,7 +1810,7 @@
     {
 	if (actext != NULL)
 	    *actext = vim_strsave(p + 1);
-	text = vim_strnsave(str, (int)(p - str));
+	text = vim_strnsave(str, p - str);
     }
     else
 	text = vim_strsave(str);
@@ -2716,7 +2716,7 @@
 		if (from != NULL)
 		{
 		    from_noamp = menu_text(from, NULL, NULL);
-		    to = vim_strnsave(to, (int)(arg - to));
+		    to = vim_strnsave(to, arg - to);
 		    if (from_noamp != NULL && to != NULL)
 		    {
 			menu_translate_tab_and_shift(from);
diff --git a/src/misc1.c b/src/misc1.c
index db76d9b..bab9e68 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -1795,7 +1795,7 @@
 	    if (p == exe_name || p == p_hf)
 #endif
 		// check that the result is a directory name
-		p = vim_strnsave(p, (int)(pend - p));
+		p = vim_strnsave(p, pend - p);
 
 	    if (p != NULL && !mch_isdir(p))
 		VIM_CLEAR(p);
@@ -2576,7 +2576,7 @@
 
 #ifdef MSWIN
     p = gettail(p_sh);
-    p = vim_strnsave(p, (int)(skiptowhite(p) - p));
+    p = vim_strnsave(p, skiptowhite(p) - p);
 #else
     p = skiptowhite(p_sh);
     if (*p == NUL)
@@ -2593,7 +2593,7 @@
 	for (p2 = p_sh; p2 < p; MB_PTR_ADV(p2))
 	    if (vim_ispathsep(*p2))
 		p1 = p2 + 1;
-	p = vim_strnsave(p1, (int)(p - p1));
+	p = vim_strnsave(p1, p - p1);
     }
 #endif
     return p;
diff --git a/src/ops.c b/src/ops.c
index 8f31deb..a681df0 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -1616,7 +1616,7 @@
 	if (pre_textlen >= 0
 		     && (ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
 	{
-	    ins_text = vim_strnsave(firstline, (int)ins_len);
+	    ins_text = vim_strnsave(firstline, ins_len);
 	    if (ins_text != NULL)
 	    {
 		// block handled here
diff --git a/src/os_win32.c b/src/os_win32.c
index 6356076..43ad102 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -477,8 +477,7 @@
 
     if (exe_path == NULL && exe_name != NULL)
     {
-	exe_path = vim_strnsave(exe_name,
-				     (int)(gettail_sep(exe_name) - exe_name));
+	exe_path = vim_strnsave(exe_name, gettail_sep(exe_name) - exe_name);
 	if (exe_path != NULL)
 	{
 	    // Append our starting directory to $PATH, so that when doing
diff --git a/src/regexp.c b/src/regexp.c
index c222d9c..de0b0fa 100644
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -1846,7 +1846,7 @@
 	if (s == NULL || rsm.sm_match->endp[i] == NULL)
 	    s = NULL;
 	else
-	    s = vim_strnsave(s, (int)(rsm.sm_match->endp[i] - s));
+	    s = vim_strnsave(s, rsm.sm_match->endp[i] - s);
 	li->li_tv.v_type = VAR_STRING;
 	li->li_tv.vval.v_string = s;
 	li = li->li_next;
@@ -2462,7 +2462,7 @@
 	if (s == NULL || rsm.sm_match->endp[no] == NULL)
 	    retval = NULL;
 	else
-	    retval = vim_strnsave(s, (int)(rsm.sm_match->endp[no] - s));
+	    retval = vim_strnsave(s, rsm.sm_match->endp[no] - s);
     }
 
     return retval;
diff --git a/src/regexp_bt.c b/src/regexp_bt.c
index fef66e4..d19515a 100644
--- a/src/regexp_bt.c
+++ b/src/regexp_bt.c
@@ -4588,7 +4588,7 @@
 		if (reg_startzp[i] != NULL && reg_endzp[i] != NULL)
 		    re_extmatch_out->matches[i] =
 			    vim_strnsave(reg_startzp[i],
-					(int)(reg_endzp[i] - reg_startzp[i]));
+						reg_endzp[i] - reg_startzp[i]);
 	    }
 	}
     }
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index a55750b..444b446 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -7103,8 +7103,7 @@
 
 		if (lpos->start != NULL && lpos->end != NULL)
 		    re_extmatch_out->matches[i] =
-			    vim_strnsave(lpos->start,
-					      (int)(lpos->end - lpos->start));
+			    vim_strnsave(lpos->start, lpos->end - lpos->start);
 	    }
 	}
     }
diff --git a/src/register.c b/src/register.c
index 3968b07..2db5136 100644
--- a/src/register.c
+++ b/src/register.c
@@ -2655,7 +2655,7 @@
     {
 	char_u	    *p, *s;
 
-	p = vim_strnsave(str, (int)len);
+	p = vim_strnsave(str, len);
 	if (p == NULL)
 	    return;
 	if (must_append && expr_line != NULL)
diff --git a/src/search.c b/src/search.c
index 7a4cdb7..91a26dd 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1916,7 +1916,7 @@
     for (p = linep + startpos->col + 1; *p && *p != '('; ++p)
 	;
     delim_len = (p - linep) - startpos->col - 1;
-    delim_copy = vim_strnsave(linep + startpos->col + 1, (int)delim_len);
+    delim_copy = vim_strnsave(linep + startpos->col + 1, delim_len);
     if (delim_copy == NULL)
 	return FALSE;
     for (lnum = startpos->lnum; lnum <= endpos->lnum; ++lnum)
diff --git a/src/sign.c b/src/sign.c
index 576c4d0..a3dfaf0 100644
--- a/src/sign.c
+++ b/src/sign.c
@@ -1309,22 +1309,22 @@
 	if (STRNCMP(arg, "icon=", 5) == 0)
 	{
 	    arg += 5;
-	    icon = vim_strnsave(arg, (int)(p - arg));
+	    icon = vim_strnsave(arg, p - arg);
 	}
 	else if (STRNCMP(arg, "text=", 5) == 0)
 	{
 	    arg += 5;
-	    text = vim_strnsave(arg, (int)(p - arg));
+	    text = vim_strnsave(arg, p - arg);
 	}
 	else if (STRNCMP(arg, "linehl=", 7) == 0)
 	{
 	    arg += 7;
-	    linehl = vim_strnsave(arg, (int)(p - arg));
+	    linehl = vim_strnsave(arg, p - arg);
 	}
 	else if (STRNCMP(arg, "texthl=", 7) == 0)
 	{
 	    arg += 7;
-	    texthl = vim_strnsave(arg, (int)(p - arg));
+	    texthl = vim_strnsave(arg, p - arg);
 	}
 	else
 	{
diff --git a/src/syntax.c b/src/syntax.c
index 5c9dd0b..6bbe4ba 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -4652,7 +4652,7 @@
 		arg = skiptowhite(arg);
 		if (gname_start == arg)
 		    return NULL;
-		gname = vim_strnsave(gname_start, (int)(arg - gname_start));
+		gname = vim_strnsave(gname_start, arg - gname_start);
 		if (gname == NULL)
 		    return NULL;
 		if (STRCMP(gname, "NONE") == 0)
@@ -4662,7 +4662,8 @@
 		    syn_id = syn_name2id(gname);
 		    for (i = curwin->w_s->b_syn_patterns.ga_len; --i >= 0; )
 			if (SYN_ITEMS(curwin->w_s)[i].sp_syn.id == syn_id
-			      && SYN_ITEMS(curwin->w_s)[i].sp_type == SPTYPE_START)
+			      && SYN_ITEMS(curwin->w_s)[i].sp_type
+							       == SPTYPE_START)
 			{
 			    *opt->sync_idx = i;
 			    break;
@@ -5656,7 +5657,7 @@
 	return NULL;
     }
     // store the pattern and compiled regexp program
-    if ((ci->sp_pattern = vim_strnsave(arg + 1, (int)(end - arg - 1))) == NULL)
+    if ((ci->sp_pattern = vim_strnsave(arg + 1, end - arg - 1)) == NULL)
 	return NULL;
 
     // Make 'cpoptions' empty, to avoid the 'l' flag
@@ -5836,8 +5837,9 @@
 	    if (!eap->skip)
 	    {
 		// store the pattern and compiled regexp program
-		if ((curwin->w_s->b_syn_linecont_pat = vim_strnsave(next_arg + 1,
-				      (int)(arg_end - next_arg - 1))) == NULL)
+		if ((curwin->w_s->b_syn_linecont_pat =
+			    vim_strnsave(next_arg + 1,
+				      arg_end - next_arg - 1)) == NULL)
 		{
 		    finished = TRUE;
 		    break;
@@ -6272,7 +6274,7 @@
     // isolate subcommand name
     for (subcmd_end = arg; ASCII_ISALPHA(*subcmd_end); ++subcmd_end)
 	;
-    subcmd_name = vim_strnsave(arg, (int)(subcmd_end - arg));
+    subcmd_name = vim_strnsave(arg, subcmd_end - arg);
     if (subcmd_name != NULL)
     {
 	if (eap->skip)		// skip error messages for all subcommands
diff --git a/src/term.c b/src/term.c
index 2f6e893..82b1126 100644
--- a/src/term.c
+++ b/src/term.c
@@ -4086,11 +4086,11 @@
     }
 
 #if defined(MSWIN) && !defined(FEAT_GUI)
-    s = vim_strnsave(string, (int)STRLEN(string) + 1);
+    s = vim_strnsave(string, STRLEN(string) + 1);
 #else
 # ifdef VIMDLL
     if (!gui.in_use)
-	s = vim_strnsave(string, (int)STRLEN(string) + 1);
+	s = vim_strnsave(string, STRLEN(string) + 1);
     else
 # endif
 	s = vim_strsave(string);
diff --git a/src/terminal.c b/src/terminal.c
index 5514c73..5424574 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -3011,7 +3011,7 @@
     {
 	case VTERM_PROP_TITLE:
 	    strval = vim_strnsave((char_u *)value->string.str,
-						       (int)value->string.len);
+							    value->string.len);
 	    if (strval == NULL)
 		break;
 	    vim_free(term->tl_title);
@@ -3073,7 +3073,7 @@
 
 	case VTERM_PROP_CURSORCOLOR:
 	    strval = vim_strnsave((char_u *)value->string.str,
-						       (int)value->string.len);
+							    value->string.len);
 	    if (strval == NULL)
 		break;
 	    cursor_color_copy(&term->tl_cursor_color, strval);
diff --git a/src/undo.c b/src/undo.c
index c2fe819..7c1e597 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -849,7 +849,7 @@
 	{
 	    // Use same directory as the ffname,
 	    // "dir/name" -> "dir/.name.un~"
-	    undo_file_name = vim_strnsave(ffname, (int)(STRLEN(ffname) + 5));
+	    undo_file_name = vim_strnsave(ffname, STRLEN(ffname) + 5);
 	    if (undo_file_name == NULL)
 		break;
 	    p = gettail(undo_file_name);
diff --git a/src/usercmd.c b/src/usercmd.c
index cdc46a1..de49d41 100644
--- a/src/usercmd.c
+++ b/src/usercmd.c
@@ -676,7 +676,7 @@
     }
 
     if (arg != NULL)
-	*compl_arg = vim_strnsave(arg, (int)arglen);
+	*compl_arg = vim_strnsave(arg, arglen);
 # endif
     return OK;
 }
@@ -939,7 +939,7 @@
     {
 	if (ga_grow(gap, 1) != OK)
 	    goto fail;
-	if ((p = vim_strnsave(name, (int)name_len)) == NULL)
+	if ((p = vim_strnsave(name, name_len)) == NULL)
 	    goto fail;
 
 	cmd = USER_CMD_GA(gap, i);
diff --git a/src/userfunc.c b/src/userfunc.c
index e2658fe..bd229b4 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -2699,7 +2699,7 @@
 	    p = skip_type(ret_type);
 	    if (p > ret_type)
 	    {
-		ret_type = vim_strnsave(ret_type, (int)(p - ret_type));
+		ret_type = vim_strnsave(ret_type, p - ret_type);
 		p = skipwhite(p);
 	    }
 	    else
@@ -2972,12 +2972,12 @@
 		    // Ignore leading white space.
 		    p = skipwhite(p + 4);
 		    heredoc_trimmed = vim_strnsave(theline,
-			    (int)(skipwhite(theline) - theline));
+						 skipwhite(theline) - theline);
 		}
 		if (*p == NUL)
 		    skip_until = vim_strsave((char_u *)".");
 		else
-		    skip_until = vim_strnsave(p, (int)(skiptowhite(p) - p));
+		    skip_until = vim_strnsave(p, skiptowhite(p) - p);
 		do_concat = FALSE;
 		is_heredoc = TRUE;
 	    }
@@ -3002,9 +3002,9 @@
 			// Ignore leading white space.
 			p = skipwhite(p + 4);
 			heredoc_trimmed = vim_strnsave(theline,
-					  (int)(skipwhite(theline) - theline));
+						 skipwhite(theline) - theline);
 		    }
-		    skip_until = vim_strnsave(p, (int)(skiptowhite(p) - p));
+		    skip_until = vim_strnsave(p, skiptowhite(p) - p);
 		    do_concat = FALSE;
 		    is_heredoc = TRUE;
 		}
diff --git a/src/version.c b/src/version.c
index fc2269c..dcf1746 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    967,
+/**/
     966,
 /**/
     965,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index f59ec12..17c16d8 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1575,7 +1575,7 @@
     RETURN_OK_IF_SKIP(cctx);
     if ((isn = generate_instr(cctx, ISN_STRINGMEMBER)) == NULL)
 	return FAIL;
-    isn->isn_arg.string = vim_strnsave(name, (int)len);
+    isn->isn_arg.string = vim_strnsave(name, len);
 
     // check for dict type
     type = ((type_T **)stack->ga_data)[stack->ga_len - 1];
@@ -1671,7 +1671,7 @@
     // entries.  This is less efficient, but memory is cheap these days.
     lvar->lv_idx = cctx->ctx_locals_count++;
 
-    lvar->lv_name = vim_strnsave(name, (int)(len == 0 ? STRLEN(name) : len));
+    lvar->lv_name = vim_strnsave(name, len == 0 ? STRLEN(name) : len);
     lvar->lv_const = isConst;
     lvar->lv_type = type;
 
@@ -4627,7 +4627,7 @@
 	--p;
 
     varlen = p - arg;
-    name = vim_strnsave(arg, (int)varlen);
+    name = vim_strnsave(arg, varlen);
     if (name == NULL)
 	return NULL;
 
@@ -6268,7 +6268,7 @@
 	{
 	    if (p > start)
 	    {
-		generate_PUSHS(cctx, vim_strnsave(start, (int)(p - start)));
+		generate_PUSHS(cctx, vim_strnsave(start, p - start));
 		++count;
 	    }
 	    p += 2;
