diff --git a/src/channel.c b/src/channel.c
index 4794ae3..f6fa13b 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -1354,7 +1354,7 @@
 	int	    id)
 {
     cbq_T *head = &channel->ch_part[part].ch_cb_head;
-    cbq_T *item = (cbq_T *)alloc((int)sizeof(cbq_T));
+    cbq_T *item = (cbq_T *)alloc(sizeof(cbq_T));
 
     if (item != NULL)
     {
@@ -3921,7 +3921,7 @@
 		}
 		else
 		{
-		    writeq_T *last = (writeq_T *)alloc((int)sizeof(writeq_T));
+		    writeq_T *last = (writeq_T *)alloc(sizeof(writeq_T));
 
 		    if (last != NULL)
 		    {
diff --git a/src/crypt.c b/src/crypt.c
index 6eb3e21..2846d28 100644
--- a/src/crypt.c
+++ b/src/crypt.c
@@ -254,7 +254,7 @@
     char_u	*seed,
     int		seed_len)
 {
-    cryptstate_T *state = (cryptstate_T *)alloc((int)sizeof(cryptstate_T));
+    cryptstate_T *state = (cryptstate_T *)alloc(sizeof(cryptstate_T));
 
     if (state == NULL)
 	return state;
@@ -407,7 +407,7 @@
 	/* Not buffering, just return EOF. */
 	return (long)len;
 
-    *newptr = alloc((long)len);
+    *newptr = alloc(len);
     if (*newptr == NULL)
 	return -1;
     method->encode_fn(state, from, len, *newptr);
diff --git a/src/dict.c b/src/dict.c
index 6e1d0d6..40c940e 100644
--- a/src/dict.c
+++ b/src/dict.c
@@ -54,7 +54,7 @@
 dict_alloc_id(alloc_id_T id UNUSED)
 {
 #ifdef FEAT_EVAL
-    if (alloc_fail_id == id && alloc_does_fail((long_u)sizeof(list_T)))
+    if (alloc_fail_id == id && alloc_does_fail(sizeof(list_T)))
 	return NULL;
 #endif
     return (dict_alloc());
diff --git a/src/dosinst.c b/src/dosinst.c
index b975ff8..0ea879a 100644
--- a/src/dosinst.c
+++ b/src/dosinst.c
@@ -306,7 +306,7 @@
 	    || strchr(cp, '/') != NULL)
 	return;
 
-    tmpname = alloc((int)strlen(cp) + 1);
+    tmpname = alloc(strlen(cp) + 1);
     strcpy(tmpname, cp);
     tmpname[strlen(tmpname) - 1] = 'x';	/* .exe -> .exx */
 
@@ -962,7 +962,7 @@
     if (choices[idx].text != NULL)
 	free(choices[idx].text);
 
-    choices[idx].text = alloc((int)(strlen(fmt) + strlen(arg)) - 1);
+    choices[idx].text = alloc(strlen(fmt) + strlen(arg) - 1);
     sprintf(choices[idx].text, fmt, arg);
 }
 
@@ -1040,7 +1040,7 @@
 		s = p + strlen(p);
 	    if (names != NULL)
 	    {
-		names[count] = alloc((int)(s - p) + 1);
+		names[count] = alloc(s - p + 1);
 		strncpy(names[count], p, s - p);
 		names[count][s - p] = NUL;
 	    }
@@ -1051,7 +1051,7 @@
 	}
 	if (names != NULL)
 	    break;
-	names = alloc((int)(count + 1) * sizeof(char *));
+	names = alloc((count + 1) * sizeof(char *));
     }
     names[0] = alloc(50);
     sprintf(names[0], "Select directory to create %s in:", name);
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 914efb1..3256b22 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -4412,7 +4412,7 @@
 	     * would also work, but some plugins depend on the name being
 	     * printable text. */
 	    sprintf(sid_buf, "<SNR>%ld_", (long)current_sctx.sc_sid);
-	    name = alloc((int)(STRLEN(sid_buf) + STRLEN(s + off) + 1));
+	    name = alloc(STRLEN(sid_buf) + STRLEN(s + off) + 1);
 	    if (name != NULL)
 	    {
 		STRCPY(name, sid_buf);
@@ -12671,7 +12671,7 @@
 	}
 
 	/* Make an array with each entry pointing to an item in the List. */
-	ptrs = (sortItem_T *)alloc((int)(len * sizeof(sortItem_T)));
+	ptrs = (sortItem_T *)alloc(len * sizeof(sortItem_T));
 	if (ptrs == NULL)
 	    goto theend;
 
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 3d96758..0275064 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -2746,7 +2746,7 @@
 		 */
 		++p;
 		len = getdigits(&p);
-		buf = alloc((int)(len + 1));
+		buf = alloc(len + 1);
 		if (buf == NULL)
 		    return TRUE;
 		p = buf;
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index c56e305..a0c7169 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -2800,7 +2800,7 @@
 
     oldlen = STRLEN(p_rtp);
     addlen = STRLEN(fname) + 1; // add one for comma
-    new_rtp = alloc((int)(oldlen + addlen + afterlen + 1)); // add one for NUL
+    new_rtp = alloc(oldlen + addlen + afterlen + 1); // add one for NUL
     if (new_rtp == NULL)
 	goto theend;
 
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 9f127ec..2b16a1e 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -4816,7 +4816,7 @@
 	    while ((pos = (char_u *)strstr((char *)pos + 2, "$*")) != NULL)
 		++i;
 	    len = (int)STRLEN(p);
-	    new_cmdline = alloc((int)(STRLEN(program) + i * (len - 2) + 1));
+	    new_cmdline = alloc(STRLEN(program) + i * (len - 2) + 1);
 	    if (new_cmdline == NULL)
 		return NULL;			/* out of memory */
 	    ptr = new_cmdline;
@@ -4832,7 +4832,7 @@
 	}
 	else
 	{
-	    new_cmdline = alloc((int)(STRLEN(program) + STRLEN(p) + 2));
+	    new_cmdline = alloc(STRLEN(program) + STRLEN(p) + 2);
 	    if (new_cmdline == NULL)
 		return NULL;			/* out of memory */
 	    STRCPY(new_cmdline, program);
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 530efce..80f1855 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -5914,8 +5914,7 @@
 	{
 	    if (newlen)
 	    {
-		temp = (histentry_T *)alloc(
-				       (long_u)(newlen * sizeof(histentry_T)));
+		temp = (histentry_T *)alloc(newlen * sizeof(histentry_T));
 		if (temp == NULL)   /* out of memory! */
 		{
 		    if (type == 0)  /* first one: just keep the old length */
@@ -6655,7 +6654,7 @@
 	    viminfo_history[type] = NULL;
 	else
 	    viminfo_history[type] = (histentry_T *)lalloc(
-				  (long_u)(len * sizeof(histentry_T)), FALSE);
+					    len * sizeof(histentry_T), FALSE);
 	if (viminfo_history[type] == NULL)
 	    len = 0;
 	viminfo_hislen[type] = len;
diff --git a/src/fileio.c b/src/fileio.c
index 96207ab..ee8c14d 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -7190,7 +7190,7 @@
     ga_init2(gap, (int)sizeof(char *), 20);
 
 #ifdef MSWIN
-    buf = alloc((int)MAXPATHL);
+    buf = alloc(MAXPATHL);
     if (buf == NULL)
 	return FAIL;
     STRNCPY(buf, path, MAXPATHL-5);
diff --git a/src/findfile.c b/src/findfile.c
index a6d164a..2fee353 100644
--- a/src/findfile.c
+++ b/src/findfile.c
@@ -588,9 +588,9 @@
 	    if (search_ctx->ffsc_wc_path != NULL)
 	    {
 		wc_path = vim_strsave(search_ctx->ffsc_wc_path);
-		temp = alloc((int)(STRLEN(search_ctx->ffsc_wc_path)
+		temp = alloc(STRLEN(search_ctx->ffsc_wc_path)
 				 + STRLEN(search_ctx->ffsc_fix_path + len)
-				 + 1));
+				 + 1);
 		if (temp == NULL || wc_path == NULL)
 		{
 		    vim_free(buf);
@@ -722,7 +722,7 @@
      * filepath is used as buffer for various actions and as the storage to
      * return a found filename.
      */
-    if ((file_path = alloc((int)MAXPATHL)) == NULL)
+    if ((file_path = alloc(MAXPATHL)) == NULL)
 	return NULL;
 
 #ifdef FEAT_PATH_EXTRA
@@ -1866,7 +1866,7 @@
 		    break;
 		}
 
-		if ((buf = alloc((int)(MAXPATHL))) == NULL)
+		if ((buf = alloc(MAXPATHL)) == NULL)
 		    break;
 
 		// copy next path
@@ -2274,7 +2274,7 @@
     char_u	*p;
     int		len;
 
-    if ((buf = alloc((int)MAXPATHL)) == NULL)
+    if ((buf = alloc(MAXPATHL)) == NULL)
 	return;
 
     while (*path_option != NUL)
@@ -2424,7 +2424,7 @@
     if (regmatch.regprog == NULL)
 	return;
 
-    if ((curdir = alloc((int)(MAXPATHL))) == NULL)
+    if ((curdir = alloc(MAXPATHL)) == NULL)
 	goto theend;
     mch_dirname(curdir, MAXPATHL);
     expand_path_option(curdir, &path_ga);
@@ -2532,7 +2532,7 @@
 	    continue;
 	}
 
-	rel_path = alloc((int)(STRLEN(short_name) + STRLEN(PATHSEPSTR) + 2));
+	rel_path = alloc(STRLEN(short_name) + STRLEN(PATHSEPSTR) + 2);
 	if (rel_path == NULL)
 	    goto theend;
 	STRCPY(rel_path, ".");
diff --git a/src/if_ole.cpp b/src/if_ole.cpp
index e52f5ec..cb643e5 100644
--- a/src/if_ole.cpp
+++ b/src/if_ole.cpp
@@ -376,7 +376,7 @@
     if (len == 0)
 	return E_INVALIDARG;
 
-    buffer = (char *)alloc((unsigned)len);
+    buffer = (char *)alloc(len);
 
     if (buffer == NULL)
 	return E_OUTOFMEMORY;
diff --git a/src/if_py_both.h b/src/if_py_both.h
index e36f4fd..bc33a80 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -2953,7 +2953,7 @@
 	    char_u *np;
 	    size_t len = STRLEN(p) + 1;
 
-	    if ((np = alloc((int)len + 2)) == NULL)
+	    if ((np = alloc(len + 2)) == NULL)
 	    {
 		vim_free(p);
 		return NULL;
@@ -3139,7 +3139,7 @@
 	if (exported)
 	{
 	    pt->pt_argv = (typval_T *)alloc_clear(
-		    sizeof(typval_T) * self->argc);
+						sizeof(typval_T) * self->argc);
 	    for (i = 0; i < pt->pt_argc; ++i)
 		copy_tv(&self->argv[i], &pt->pt_argv[i]);
 	}
@@ -4262,7 +4262,7 @@
     /* Create a copy of the string, with internal nulls replaced by
      * newline characters, as is the vim convention.
      */
-    save = (char *)alloc((unsigned)(len+1));
+    save = (char *)alloc(len+1);
     if (save == NULL)
     {
 	PyErr_NoMemory();
diff --git a/src/list.c b/src/list.c
index 0c21c41..e7f27eb 100644
--- a/src/list.c
+++ b/src/list.c
@@ -92,7 +92,7 @@
 list_alloc_id(alloc_id_T id UNUSED)
 {
 #ifdef FEAT_EVAL
-    if (alloc_fail_id == id && alloc_does_fail((long_u)sizeof(list_T)))
+    if (alloc_fail_id == id && alloc_does_fail(sizeof(list_T)))
 	return NULL;
 #endif
     return (list_alloc());
@@ -122,7 +122,7 @@
 rettv_list_alloc_id(typval_T *rettv, alloc_id_T id UNUSED)
 {
 #ifdef FEAT_EVAL
-    if (alloc_fail_id == id && alloc_does_fail((long_u)sizeof(list_T)))
+    if (alloc_fail_id == id && alloc_does_fail(sizeof(list_T)))
 	return FAIL;
 #endif
     return rettv_list_alloc(rettv);
diff --git a/src/message.c b/src/message.c
index f1801c3..489edc3 100644
--- a/src/message.c
+++ b/src/message.c
@@ -875,7 +875,7 @@
 	(void)delete_first_msg();
 
     /* allocate an entry and add the message at the end of the history */
-    p = (struct msg_hist *)alloc((int)sizeof(struct msg_hist));
+    p = (struct msg_hist *)alloc(sizeof(struct msg_hist));
     if (p != NULL)
     {
 	if (len < 0)
@@ -2360,7 +2360,7 @@
 
     if (s > *sb_str)
     {
-	mp = (msgchunk_T *)alloc((int)(sizeof(msgchunk_T) + (s - *sb_str)));
+	mp = (msgchunk_T *)alloc(sizeof(msgchunk_T) + (s - *sb_str));
 	if (mp != NULL)
 	{
 	    mp->sb_eol = finish;
diff --git a/src/misc1.c b/src/misc1.c
index bb82f09..7ef7e78 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -3446,7 +3446,7 @@
 
     // Make room for file name.  When doing encoding conversion the actual
     // length may be quite a bit longer, thus use the maximum possible length.
-    buf = alloc((int)MAXPATHL);
+    buf = alloc(MAXPATHL);
     if (buf == NULL)
 	return 0;
 
@@ -3690,7 +3690,7 @@
     }
 
     /* make room for file name */
-    buf = alloc((int)STRLEN(path) + BASENAMELEN + 5);
+    buf = alloc(STRLEN(path) + BASENAMELEN + 5);
     if (buf == NULL)
 	return 0;
 
diff --git a/src/misc2.c b/src/misc2.c
index ddb677c..70b23e7 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -1290,7 +1290,7 @@
 {
     char_u	*p;
 
-    p = alloc((size_t)(len + 1));
+    p = alloc(len + 1);
     if (p != NULL)
     {
 	STRNCPY(p, string, len);
diff --git a/src/ops.c b/src/ops.c
index b205cbb..0adb2bc 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -3355,7 +3355,7 @@
     free_yank_all();
     *y_current = *curr;
     y_current->y_array = (char_u **)lalloc_clear(
-			(long_u)(sizeof(char_u *) * y_current->y_size), TRUE);
+				    sizeof(char_u *) * y_current->y_size, TRUE);
     if (y_current->y_array == NULL)
 	y_current->y_size = 0;
     else
diff --git a/src/os_vms.c b/src/os_vms.c
index ca04019..f20e8c2 100644
--- a/src/os_vms.c
+++ b/src/os_vms.c
@@ -245,7 +245,7 @@
     else if ((sbuf = getenv((char *)lognam)))
     {
 	lengte = strlen(sbuf) + 1;
-	cp = (char_u *)alloc((size_t)lengte);
+	cp = (char_u *)alloc(lengte);
 	if (cp)
 	    strcpy((char *)cp, sbuf);
 	return cp;
diff --git a/src/os_win32.c b/src/os_win32.c
index 5bec2a2..6a832cf 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -7117,7 +7117,7 @@
 	return;
 
     /* Remember the buffer numbers for the arguments. */
-    fnum_list = (int *)alloc((int)sizeof(int) * GARGCOUNT);
+    fnum_list = (int *)alloc(sizeof(int) * GARGCOUNT);
     if (fnum_list == NULL)
 	return;		/* out of memory */
     for (i = 0; i < GARGCOUNT; ++i)
diff --git a/src/quickfix.c b/src/quickfix.c
index 69ffc9c..4f3db39 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -1815,7 +1815,7 @@
 
     if (title != NULL)
     {
-	char_u *p = alloc((int)STRLEN(title) + 2);
+	char_u *p = alloc(STRLEN(title) + 2);
 
 	qfl->qf_title = p;
 	if (p != NULL)
diff --git a/src/regexp_nfa.c b/src/regexp_nfa.c
index f81c05d..cb9c801 100644
--- a/src/regexp_nfa.c
+++ b/src/regexp_nfa.c
@@ -4799,7 +4799,7 @@
 		emsg(_(e_maxmempat));
 		return NULL;
 	    }
-	    newl = (nfa_thread_T *)alloc((int)newsize);
+	    newl = (nfa_thread_T *)alloc(newsize);
 	    if (newl == NULL)
 		return NULL;
 	    l->len = newlen;
diff --git a/src/screen.c b/src/screen.c
index 79baebe..447dd41 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -328,30 +328,27 @@
 
     /* Allocate space to save the text displayed in the command line area. */
     rows = screen_Rows - cmdline_row;
-    screenline = (schar_T *)lalloc(
-			   (long_u)(rows * cols * sizeof(schar_T)), FALSE);
-    screenattr = (sattr_T *)lalloc(
-			   (long_u)(rows * cols * sizeof(sattr_T)), FALSE);
+    screenline = (schar_T *)lalloc(rows * cols * sizeof(schar_T), FALSE);
+    screenattr = (sattr_T *)lalloc(rows * cols * sizeof(sattr_T), FALSE);
     if (screenline == NULL || screenattr == NULL)
 	ret = 2;
     if (enc_utf8)
     {
 	screenlineUC = (u8char_T *)lalloc(
-			  (long_u)(rows * cols * sizeof(u8char_T)), FALSE);
+				       rows * cols * sizeof(u8char_T), FALSE);
 	if (screenlineUC == NULL)
 	    ret = 2;
 	for (i = 0; i < p_mco; ++i)
 	{
 	    screenlineC[i] = (u8char_T *)lalloc(
-			  (long_u)(rows * cols * sizeof(u8char_T)), FALSE);
+				       rows * cols * sizeof(u8char_T), FALSE);
 	    if (screenlineC[i] == NULL)
 		ret = 2;
 	}
     }
     if (enc_dbcs == DBCS_JPNU)
     {
-	screenline2 = (schar_T *)lalloc(
-			   (long_u)(rows * cols * sizeof(schar_T)), FALSE);
+	screenline2 = (schar_T *)lalloc(rows * cols * sizeof(schar_T), FALSE);
 	if (screenline2 == NULL)
 	    ret = 2;
     }
diff --git a/src/search.c b/src/search.c
index 313892f..20e619d 100644
--- a/src/search.c
+++ b/src/search.c
@@ -1429,7 +1429,7 @@
 		// Reserve enough space for the search pattern + offset.
 		len = STRLEN(p) + off_len + 3;
 
-	    msgbuf = alloc((int)len);
+	    msgbuf = alloc(len);
 	    if (msgbuf != NULL)
 	    {
 		vim_memset(msgbuf, ' ', len);
diff --git a/src/sign.c b/src/sign.c
index 32e6bad..9766d4e 100644
--- a/src/sign.c
+++ b/src/sign.c
@@ -85,8 +85,7 @@
     if (HASHITEM_EMPTY(hi))
     {
 	// new group
-	group = (signgroup_T *)alloc(
-		(unsigned)(sizeof(signgroup_T) + STRLEN(groupname)));
+	group = (signgroup_T *)alloc(sizeof(signgroup_T) + STRLEN(groupname));
 	if (group == NULL)
 	    return NULL;
 	STRCPY(group->sg_name, groupname);
@@ -737,8 +736,7 @@
     int	start = next_sign_typenr;
 
     // Allocate a new sign.
-    sp = (sign_T *)alloc_clear_id((unsigned)sizeof(sign_T),
-	    aid_sign_define_by_name);
+    sp = (sign_T *)alloc_clear_id(sizeof(sign_T), aid_sign_define_by_name);
     if (sp == NULL)
 	return NULL;
 
diff --git a/src/syntax.c b/src/syntax.c
index e711198..23ccaf3 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -4494,7 +4494,7 @@
 						 name_folded, MAXKEYWLEN + 1);
     else
 	name_ic = name;
-    kp = (keyentry_T *)alloc((int)(sizeof(keyentry_T) + STRLEN(name_ic)));
+    kp = (keyentry_T *)alloc(sizeof(keyentry_T) + STRLEN(name_ic));
     if (kp == NULL)
 	return;
     STRCPY(kp->keyword, name_ic);
@@ -6001,7 +6001,7 @@
 	{
 	    for (end = p; *end && !VIM_ISWHITE(*end) && *end != ','; ++end)
 		;
-	    name = alloc((int)(end - p + 3));	    /* leave room for "^$" */
+	    name = alloc(end - p + 3);	    /* leave room for "^$" */
 	    if (name == NULL)
 	    {
 		failed = TRUE;
diff --git a/src/tag.c b/src/tag.c
index b6ae1b0..ef2ebbe 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -1430,7 +1430,7 @@
 	if (name_only)
 	    mfp = vim_strsave(res_name);
 	else
-	    mfp = (char_u *)alloc((int)sizeof(char_u) + len + 1);
+	    mfp = (char_u *)alloc(sizeof(char_u) + len + 1);
 
 	if (mfp == NULL)
 	    continue;
@@ -2536,7 +2536,7 @@
 		     */
 		    *tagp.tagname_end = NUL;
 		    len = (int)(tagp.tagname_end - tagp.tagname);
-		    mfp = (char_u *)alloc((int)sizeof(char_u)
+		    mfp = (char_u *)alloc(sizeof(char_u)
 						    + len + 10 + ML_EXTRA + 1);
 		    if (mfp != NULL)
 		    {
@@ -2585,7 +2585,7 @@
 		    else
 		    {
 			len = (int)(tagp.tagname_end - tagp.tagname);
-			mfp = (char_u *)alloc((int)sizeof(char_u) + len + 1);
+			mfp = (char_u *)alloc(sizeof(char_u) + len + 1);
 			if (mfp != NULL)
 			    vim_strncpy(mfp, tagp.tagname, len);
 
@@ -2620,7 +2620,7 @@
 		    else
 			++len;
 #endif
-		    mfp = (char_u *)alloc((int)sizeof(char_u) + len + 1);
+		    mfp = (char_u *)alloc(sizeof(char_u) + len + 1);
 		    if (mfp != NULL)
 		    {
 			p = mfp;
@@ -3346,7 +3346,7 @@
     /* Make a copy of the line, it can become invalid when an autocommand calls
      * back here recursively. */
     len = matching_line_len(lbuf_arg) + 1;
-    lbuf = alloc((int)len);
+    lbuf = alloc(len);
     if (lbuf != NULL)
 	mch_memmove(lbuf, lbuf_arg, len);
 
diff --git a/src/term.c b/src/term.c
index 9885fec..e831f8d 100644
--- a/src/term.c
+++ b/src/term.c
@@ -4188,7 +4188,7 @@
     {
 	tc_max_len += 20;
 	new_tc = (struct termcode *)alloc(
-			    (unsigned)(tc_max_len * sizeof(struct termcode)));
+			    tc_max_len * sizeof(struct termcode));
 	if (new_tc == NULL)
 	{
 	    tc_max_len -= 20;
@@ -7072,7 +7072,7 @@
 	    if (!counting)
 	    {
 		colornames_table = (struct rgbcolor_table_S *)alloc(
-			   (unsigned)(sizeof(struct rgbcolor_table_S) * size));
+				    sizeof(struct rgbcolor_table_S) * size);
 		if (colornames_table == NULL)
 		{
 		    fclose(fd);
diff --git a/src/terminal.c b/src/terminal.c
index 606a9db..b030403 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -534,7 +534,7 @@
 	    cmd = (char_u*)"";
 
 	len = STRLEN(cmd) + 10;
-	p = alloc((int)len);
+	p = alloc(len);
 
 	for (i = 0; p != NULL; ++i)
 	{
@@ -1630,7 +1630,7 @@
 	    if (len == 0)
 		p = NULL;
 	    else
-		p = (cellattr_T *)alloc((int)sizeof(cellattr_T) * len);
+		p = (cellattr_T *)alloc(sizeof(cellattr_T) * len);
 	    if ((p != NULL || len == 0)
 				     && ga_grow(&term->tl_scrollback, 1) == OK)
 	    {
@@ -2884,7 +2884,7 @@
 
 	ga_init2(&ga, 1, 100);
 	if (len > 0)
-	    p = (cellattr_T *)alloc((int)sizeof(cellattr_T) * len);
+	    p = (cellattr_T *)alloc(sizeof(cellattr_T) * len);
 	if (p != NULL)
 	{
 	    for (col = 0; col < len; col += cells[col].width)
@@ -3718,7 +3718,7 @@
 	    p = dict_get_string(dict, (char_u *)"encoding", FALSE);
 	if (p != NULL)
 	{
-	    ea.cmd = alloc((int)STRLEN(p) + 12);
+	    ea.cmd = alloc(STRLEN(p) + 12);
 	    if (ea.cmd != NULL)
 	    {
 		sprintf((char *)ea.cmd, "sbuf ++enc=%s", p);
@@ -4031,7 +4031,7 @@
 	else
 	    txt = (char_u *)_("finished");
 	len = 9 + STRLEN(term->tl_buffer->b_fname) + STRLEN(txt);
-	term->tl_status_text = alloc((int)len);
+	term->tl_status_text = alloc(len);
 	if (term->tl_status_text != NULL)
 	    vim_snprintf((char *)term->tl_status_text, len, "%s [%s]",
 						term->tl_buffer->b_fname, txt);
@@ -4663,7 +4663,7 @@
     {
 	size_t len = STRLEN(fname1) + 12;
 
-	fname_tofree = alloc((int)len);
+	fname_tofree = alloc(len);
 	if (fname_tofree != NULL)
 	{
 	    vim_snprintf((char *)fname_tofree, len, "dump diff %s", fname1);
@@ -4935,7 +4935,7 @@
     else
     {
 	size_t		size = sizeof(sb_line_T) * term->tl_scrollback.ga_len;
-	sb_line_T	*temp = (sb_line_T *)alloc((int)size);
+	sb_line_T	*temp = (sb_line_T *)alloc(size);
 
 	/* need to copy cell properties into temp memory */
 	if (temp != NULL)
@@ -5800,7 +5800,7 @@
     {
 	/* Request by CreateProcessW */
 	breq = wcslen(cmd_wchar) + 1 + 1;	/* Addition of NUL by API */
-	cmd_wchar_copy = (PWSTR)alloc((int)(breq * sizeof(WCHAR)));
+	cmd_wchar_copy = (PWSTR)alloc(breq * sizeof(WCHAR));
 	wcsncpy(cmd_wchar_copy, cmd_wchar, breq - 1);
     }
 
@@ -5830,7 +5830,7 @@
     /* Set up pipe inheritance safely: Vista or later. */
     pInitializeProcThreadAttributeList(NULL, 1, 0, &breq);
     term->tl_siex.lpAttributeList =
-	    (PPROC_THREAD_ATTRIBUTE_LIST)alloc((int)breq);
+	    (PPROC_THREAD_ATTRIBUTE_LIST)alloc(breq);
     if (!term->tl_siex.lpAttributeList)
 	goto failed;
     if (!pInitializeProcThreadAttributeList(term->tl_siex.lpAttributeList, 1,
diff --git a/src/textprop.c b/src/textprop.c
index fcf3741..0abae13 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -1220,7 +1220,7 @@
     oldproplen = get_text_props(curbuf, lnum, &props, FALSE);
 
     len = STRLEN(newp) + 1;
-    line = alloc((int)(len + (oldproplen + proplen) * sizeof(textprop_T)));
+    line = alloc(len + (oldproplen + proplen) * sizeof(textprop_T));
     if (line == NULL)
 	return;
     mch_memmove(line, newp, len);
diff --git a/src/version.c b/src/version.c
index f8e1d45..f774932 100644
--- a/src/version.c
+++ b/src/version.c
@@ -768,6 +768,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1393,
+/**/
     1392,
 /**/
     1391,
