diff --git a/src/arglist.c b/src/arglist.c
index 3ca5e4c..fbd99af 100644
--- a/src/arglist.c
+++ b/src/arglist.c
@@ -51,7 +51,7 @@
     void
 alist_init(alist_T *al)
 {
-    ga_init2(&al->al_ga, (int)sizeof(aentry_T), 5);
+    ga_init2(&al->al_ga, sizeof(aentry_T), 5);
 }
 
 /*
@@ -275,7 +275,7 @@
     static int
 get_arglist(garray_T *gap, char_u *str, int escaped)
 {
-    ga_init2(gap, (int)sizeof(char_u *), 20);
+    ga_init2(gap, sizeof(char_u *), 20);
     while (*str != NUL)
     {
 	if (ga_grow(gap, 1) == FAIL)
diff --git a/src/channel.c b/src/channel.c
index 4ab0549..0b8bfb3 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -2306,7 +2306,7 @@
     garray_T *gap = &chanpart->ch_block_ids;
 
     if (gap->ga_growsize == 0)
-	ga_init2(gap, (int)sizeof(int), 10);
+	ga_init2(gap, sizeof(int), 10);
     if (ga_grow(gap, 1) == OK)
     {
 	((int *)gap->ga_data)[gap->ga_len] = id;
diff --git a/src/cmdexpand.c b/src/cmdexpand.c
index e496bc3..464dc96 100644
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -2342,7 +2342,7 @@
     // Go over all directories in $PATH.  Expand matches in that directory and
     // collect them in "ga".  When "." is not in $PATH also expand for the
     // current directory, to find "subdir/cmd".
-    ga_init2(&ga, (int)sizeof(char *), 10);
+    ga_init2(&ga, sizeof(char *), 10);
     hash_init(&found_ht);
     for (s = path; ; s = e)
     {
@@ -2497,7 +2497,7 @@
     if (retstr == NULL)
 	return FAIL;
 
-    ga_init2(&ga, (int)sizeof(char *), 3);
+    ga_init2(&ga, sizeof(char *), 3);
     for (s = retstr; *s != NUL; s = e)
     {
 	e = vim_strchr(s, '\n');
@@ -2543,7 +2543,7 @@
     if (retlist == NULL)
 	return FAIL;
 
-    ga_init2(&ga, (int)sizeof(char *), 3);
+    ga_init2(&ga, sizeof(char *), 3);
     // Loop over the items in the list.
     FOR_ALL_LIST_ITEMS(retlist, li)
     {
diff --git a/src/dict.c b/src/dict.c
index 64c9d5f..9c6b7d4 100644
--- a/src/dict.c
+++ b/src/dict.c
@@ -759,7 +759,7 @@
 
     if ((d = tv->vval.v_dict) == NULL)
 	return NULL;
-    ga_init2(&ga, (int)sizeof(char), 80);
+    ga_init2(&ga, sizeof(char), 80);
     ga_append(&ga, '{');
 
     todo = (int)d->dv_hashtab.ht_used;
diff --git a/src/digraph.c b/src/digraph.c
index 4c45e08..f46e43f 100644
--- a/src/digraph.c
+++ b/src/digraph.c
@@ -2632,7 +2632,7 @@
     keymap_unload();
 
     curbuf->b_kmap_state = 0;
-    ga_init2(&curbuf->b_kmap_ga, (int)sizeof(kmap_T), 20);
+    ga_init2(&curbuf->b_kmap_ga, sizeof(kmap_T), 20);
 
     // Set 'cpoptions' to "C" to avoid line continuation.
     p_cpo = (char_u *)"C";
diff --git a/src/eval.c b/src/eval.c
index ec89681..390bb58 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -487,7 +487,7 @@
 
     if (convert && tv->v_type == VAR_LIST)
     {
-	ga_init2(&ga, (int)sizeof(char), 80);
+	ga_init2(&ga, sizeof(char), 80);
 	if (tv->vval.v_list != NULL)
 	{
 	    list_join(&ga, tv->vval.v_list, (char_u *)"\n", TRUE, FALSE, 0);
diff --git a/src/evalfunc.c b/src/evalfunc.c
index bb50d55..949bab8 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -3662,7 +3662,7 @@
 
     if (redir_execute)
 	save_ga = redir_execute_ga;
-    ga_init2(&redir_execute_ga, (int)sizeof(char), 500);
+    ga_init2(&redir_execute_ga, sizeof(char), 500);
     redir_execute = TRUE;
     redir_off = FALSE;
     if (!echo_output)
diff --git a/src/evalvars.c b/src/evalvars.c
index 3be9993..d93fed5 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -4025,7 +4025,7 @@
     void
 init_redir_ga(void)
 {
-    ga_init2(&redir_ga, (int)sizeof(char), 500);
+    ga_init2(&redir_ga, sizeof(char), 500);
 }
 
 /*
diff --git a/src/evalwindow.c b/src/evalwindow.c
index 2a97adc..d632deb 100644
--- a/src/evalwindow.c
+++ b/src/evalwindow.c
@@ -1120,7 +1120,7 @@
     garray_T	ga;
     char_u	buf[50];
 
-    ga_init2(&ga, (int)sizeof(char), 70);
+    ga_init2(&ga, sizeof(char), 70);
 
     // Do this twice to handle some window layouts properly.
     for (i = 0; i < 2; ++i)
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index be95992..7134359 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -691,7 +691,7 @@
 #ifdef FEAT_EVAL
     CLEAR_FIELD(cstack);
     cstack.cs_idx = -1;
-    ga_init2(&lines_ga, (int)sizeof(wcmd_T), 10);
+    ga_init2(&lines_ga, sizeof(wcmd_T), 10);
 
     real_cookie = getline_cookie(fgetline, cookie);
 
diff --git a/src/fileio.c b/src/fileio.c
index c33625a..1fcf0d9 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -4774,7 +4774,7 @@
     struct dirent	*dp;
 # endif
 
-    ga_init2(gap, (int)sizeof(void *), 20);
+    ga_init2(gap, sizeof(void *), 20);
 
 # ifdef FEAT_EVAL
 #  define FREE_ITEM(item)   do { \
diff --git a/src/filepath.c b/src/filepath.c
index e44fcd0..eb5b8e0 100644
--- a/src/filepath.c
+++ b/src/filepath.c
@@ -1388,7 +1388,7 @@
     }
     if (file != NULL && !error)
     {
-	ga_init2(&ga, (int)sizeof(char_u *), 10);
+	ga_init2(&ga, sizeof(char_u *), 10);
 	globpath(tv_get_string(&argvars[0]), file, &ga, flags);
 	if (rettv->v_type == VAR_STRING)
 	    rettv->vval.v_string = ga_concat_strings(&ga, "\n");
@@ -3908,7 +3908,7 @@
     /*
      * The matching file names are stored in a growarray.  Init it empty.
      */
-    ga_init2(&ga, (int)sizeof(char_u *), 30);
+    ga_init2(&ga, sizeof(char_u *), 30);
 
     for (i = 0; i < num_pat; ++i)
     {
diff --git a/src/findfile.c b/src/findfile.c
index 230f487..110e06b 100644
--- a/src/findfile.c
+++ b/src/findfile.c
@@ -2430,7 +2430,7 @@
     char_u	*short_name;
 
     remove_duplicates(gap);
-    ga_init2(&path_ga, (int)sizeof(char_u *), 1);
+    ga_init2(&path_ga, sizeof(char_u *), 1);
 
     /*
      * We need to prepend a '*' at the beginning of file_pattern so that the
@@ -2611,7 +2611,7 @@
 	return 0;
     mch_dirname(curdir, MAXPATHL);
 
-    ga_init2(&path_ga, (int)sizeof(char_u *), 1);
+    ga_init2(&path_ga, sizeof(char_u *), 1);
     expand_path_option(curdir, &path_ga);
     vim_free(curdir);
     if (path_ga.ga_len == 0)
diff --git a/src/fold.c b/src/fold.c
index 5011887..f314d7a 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -647,7 +647,7 @@
     if (ga_grow(gap, 1) == OK)
     {
 	fp = (fold_T *)gap->ga_data + i;
-	ga_init2(&fold_ga, (int)sizeof(fold_T), 10);
+	ga_init2(&fold_ga, sizeof(fold_T), 10);
 
 	// Count number of folds that will be contained in the new fold.
 	for (cont = 0; i + cont < gap->ga_len; ++cont)
@@ -1018,7 +1018,7 @@
     void
 foldInitWin(win_T *new_win)
 {
-    ga_init2(&new_win->w_folds, (int)sizeof(fold_T), 10);
+    ga_init2(&new_win->w_folds, sizeof(fold_T), 10);
 }
 
 // find_wl_entry() {{{2
@@ -2868,7 +2868,7 @@
     if (gap->ga_len > 0 && i < gap->ga_len)
 	mch_memmove(fp + 1, fp, sizeof(fold_T) * (gap->ga_len - i));
     ++gap->ga_len;
-    ga_init2(&fp->fd_nested, (int)sizeof(fold_T), 10);
+    ga_init2(&fp->fd_nested, sizeof(fold_T), 10);
     return OK;
 }
 
diff --git a/src/hardcopy.c b/src/hardcopy.c
index 33c72b7..c99dc5f 100644
--- a/src/hardcopy.c
+++ b/src/hardcopy.c
@@ -1650,7 +1650,7 @@
 	    prt_write_string("s\n");
 
 	ga_clear(&prt_ps_buffer);
-	ga_init2(&prt_ps_buffer, (int)sizeof(char), prt_bufsiz);
+	ga_init2(&prt_ps_buffer, sizeof(char), prt_bufsiz);
     }
 }
 
@@ -2649,7 +2649,7 @@
     prt_bufsiz = psettings->chars_per_line;
     if (prt_out_mbyte)
 	prt_bufsiz *= 2;
-    ga_init2(&prt_ps_buffer, (int)sizeof(char), prt_bufsiz);
+    ga_init2(&prt_ps_buffer, sizeof(char), prt_bufsiz);
 
     prt_page_num = 0;
 
diff --git a/src/help.c b/src/help.c
index fca7cfc..16fbafc 100644
--- a/src/help.c
+++ b/src/help.c
@@ -999,7 +999,7 @@
 
     // If using the "++t" argument or generating tags for "$VIMRUNTIME/doc"
     // add the "help-tags" tag.
-    ga_init2(&ga, (int)sizeof(char_u *), 100);
+    ga_init2(&ga, sizeof(char_u *), 100);
     if (add_help_tags || fullpathcmp((char_u *)"$VIMRUNTIME/doc",
 						dir, FALSE, TRUE) == FPC_SAME)
     {
diff --git a/src/if_py_both.h b/src/if_py_both.h
index 5364f6b..8e349c5 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -3264,7 +3264,7 @@
     typval_T tv;
     char_u numbuf[NUMBUFLEN];
 
-    ga_init2(&repr_ga, (int)sizeof(char), 70);
+    ga_init2(&repr_ga, sizeof(char), 70);
     ga_concat(&repr_ga, (char_u *)"<vim.Function '");
     if (self->name)
 	ga_concat(&repr_ga, self->name);
diff --git a/src/job.c b/src/job.c
index 4055415..0ed33a7 100644
--- a/src/job.c
+++ b/src/job.c
@@ -1296,7 +1296,7 @@
 
     job->jv_status = JOB_FAILED;
 #ifndef USE_ARGV
-    ga_init2(&ga, (int)sizeof(char*), 20);
+    ga_init2(&ga, sizeof(char*), 20);
 #endif
 
     if (opt_arg != NULL)
@@ -1435,7 +1435,7 @@
     {
 	garray_T    ga;
 
-	ga_init2(&ga, (int)sizeof(char), 200);
+	ga_init2(&ga, sizeof(char), 200);
 	for (i = 0; i < argc; ++i)
 	{
 	    if (i > 0)
diff --git a/src/list.c b/src/list.c
index 8658701..dca5ff0 100644
--- a/src/list.c
+++ b/src/list.c
@@ -1299,7 +1299,7 @@
 
     if (tv->vval.v_list == NULL)
 	return NULL;
-    ga_init2(&ga, (int)sizeof(char), 80);
+    ga_init2(&ga, sizeof(char), 80);
     ga_append(&ga, '[');
     CHECK_LIST_MATERIALIZE(tv->vval.v_list);
     if (list_join(&ga, tv->vval.v_list, (char_u *)", ",
@@ -1412,7 +1412,7 @@
 
     if (l->lv_len < 1)
 	return OK; // nothing to do
-    ga_init2(&join_ga, (int)sizeof(join_T), l->lv_len);
+    ga_init2(&join_ga, sizeof(join_T), l->lv_len);
     retval = list_join_inner(gap, l, sep, echo_style, restore_copyID,
 							    copyID, &join_ga);
 
@@ -1461,7 +1461,7 @@
 
     if (sep != NULL)
     {
-	ga_init2(&ga, (int)sizeof(char), 80);
+	ga_init2(&ga, sizeof(char), 80);
 	list_join(&ga, argvars[0].vval.v_list, sep, TRUE, FALSE, 0);
 	ga_append(&ga, NUL);
 	rettv->vval.v_string = (char_u *)ga.ga_data;
diff --git a/src/menu.c b/src/menu.c
index 614196a..880a93a 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -2664,7 +2664,7 @@
     char_u		*from, *from_noamp, *to;
 
     if (menutrans_ga.ga_itemsize == 0)
-	ga_init2(&menutrans_ga, (int)sizeof(menutrans_T), 5);
+	ga_init2(&menutrans_ga, sizeof(menutrans_T), 5);
 
     /*
      * ":menutrans clear": clear all translations.
diff --git a/src/os_win32.c b/src/os_win32.c
index fb1b29d..55df506 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -5280,7 +5280,7 @@
     ofd[1] = INVALID_HANDLE_VALUE;
     efd[0] = INVALID_HANDLE_VALUE;
     efd[1] = INVALID_HANDLE_VALUE;
-    ga_init2(&ga, (int)sizeof(wchar_t), 500);
+    ga_init2(&ga, sizeof(wchar_t), 500);
 
     jo = CreateJobObject(NULL, NULL);
     if (jo == NULL)
diff --git a/src/register.c b/src/register.c
index 08a73fe..d604bae 100644
--- a/src/register.c
+++ b/src/register.c
@@ -527,7 +527,7 @@
     int		j;
     char_u	*str;
 
-    ga_init2(&ga, (int)sizeof(char_u), 400);
+    ga_init2(&ga, sizeof(char_u), 400);
 
     // search backwards to find the first line of this command.
     // Any line not starting with \ or "\ is the start of the
diff --git a/src/scriptfile.c b/src/scriptfile.c
index 8fb3cae..c10a82f 100644
--- a/src/scriptfile.c
+++ b/src/scriptfile.c
@@ -835,7 +835,7 @@
     *num_file = 0;
     *file = NULL;
     pat_len = (int)STRLEN(pat);
-    ga_init2(&ga, (int)sizeof(char *), 10);
+    ga_init2(&ga, sizeof(char *), 10);
 
     for (i = 0; dirnames[i] != NULL; ++i)
     {
@@ -929,7 +929,7 @@
     *num_file = 0;
     *file = NULL;
     pat_len = (int)STRLEN(pat);
-    ga_init2(&ga, (int)sizeof(char *), 10);
+    ga_init2(&ga, sizeof(char *), 10);
 
     s = alloc(pat_len + 26);
     if (s == NULL)
@@ -1833,7 +1833,7 @@
 	{
 	    garray_T    ga;
 
-	    ga_init2(&ga, (int)sizeof(char_u), 400);
+	    ga_init2(&ga, sizeof(char_u), 400);
 	    ga_concat(&ga, line);
 	    if (*p == '\\')
 		ga_concat(&ga, p + 1);
diff --git a/src/spellfile.c b/src/spellfile.c
index c00930d..af6c6ef 100644
--- a/src/spellfile.c
+++ b/src/spellfile.c
@@ -5905,12 +5905,12 @@
     spin.si_ascii = ascii;
     spin.si_followup = TRUE;
     spin.si_rem_accents = TRUE;
-    ga_init2(&spin.si_rep, (int)sizeof(fromto_T), 20);
-    ga_init2(&spin.si_repsal, (int)sizeof(fromto_T), 20);
-    ga_init2(&spin.si_sal, (int)sizeof(fromto_T), 20);
-    ga_init2(&spin.si_map, (int)sizeof(char_u), 100);
-    ga_init2(&spin.si_comppat, (int)sizeof(char_u *), 20);
-    ga_init2(&spin.si_prefcond, (int)sizeof(char_u *), 50);
+    ga_init2(&spin.si_rep, sizeof(fromto_T), 20);
+    ga_init2(&spin.si_repsal, sizeof(fromto_T), 20);
+    ga_init2(&spin.si_sal, sizeof(fromto_T), 20);
+    ga_init2(&spin.si_map, sizeof(char_u), 100);
+    ga_init2(&spin.si_comppat, sizeof(char_u *), 20);
+    ga_init2(&spin.si_prefcond, sizeof(char_u *), 50);
     hash_init(&spin.si_commonwords);
     spin.si_newcompID = 127;	// start compound ID at first maximum
 
diff --git a/src/spellsuggest.c b/src/spellsuggest.c
index e9f2cd5..b2b4029 100644
--- a/src/spellsuggest.c
+++ b/src/spellsuggest.c
@@ -774,8 +774,8 @@
 
     // Set the info in "*su".
     CLEAR_POINTER(su);
-    ga_init2(&su->su_ga, (int)sizeof(suggest_T), 10);
-    ga_init2(&su->su_sga, (int)sizeof(suggest_T), 10);
+    ga_init2(&su->su_ga, sizeof(suggest_T), 10);
+    ga_init2(&su->su_sga, sizeof(suggest_T), 10);
     if (*badptr == NUL)
 	return;
     hash_init(&su->su_banned);
@@ -2943,7 +2943,7 @@
     check_suggestions(su, &su->su_sga);
     (void)cleanup_suggestions(&su->su_sga, su->su_maxscore, su->su_maxcount);
 
-    ga_init2(&ga, (int)sizeof(suginfo_T), 1);
+    ga_init2(&ga, sizeof(suginfo_T), 1);
     if (ga_grow(&ga, su->su_ga.ga_len + su->su_sga.ga_len) == FAIL)
 	return;
 
diff --git a/src/strings.c b/src/strings.c
index 5c55c1e..f6affd6 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -893,7 +893,7 @@
     // set_vim_var_nr() doesn't set the type
     set_vim_var_type(VV_KEY, VAR_NUMBER);
 
-    ga_init2(&ga, (int)sizeof(char), 80);
+    ga_init2(&ga, sizeof(char), 80);
     for (p = str; *p != NUL; p += len)
     {
 	typval_T newtv;
@@ -1673,7 +1673,7 @@
     rettv->vval.v_string = NULL;
     if (fromstr == NULL || tostr == NULL)
 	    return;		// type error; errmsg already given
-    ga_init2(&ga, (int)sizeof(char), 80);
+    ga_init2(&ga, sizeof(char), 80);
 
     if (!has_mbyte)
 	// not multi-byte: fromstr and tostr must be the same length
diff --git a/src/syntax.c b/src/syntax.c
index f4d7f1d..d2e15a3 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -1414,7 +1414,7 @@
 	{
 	    // Need to clear it, might be something remaining from when the
 	    // length was less than SST_FIX_STATES.
-	    ga_init2(&sp->sst_union.sst_ga, (int)sizeof(bufstate_T), 1);
+	    ga_init2(&sp->sst_union.sst_ga, sizeof(bufstate_T), 1);
 	    if (ga_grow(&sp->sst_union.sst_ga, current_state.ga_len) == FAIL)
 		sp->sst_stacksize = 0;
 	    else
@@ -1833,7 +1833,7 @@
 
     // Init the list of zero-width matches with a nextlist.  This is used to
     // avoid matching the same item in the same position twice.
-    ga_init2(&zero_width_next_ga, (int)sizeof(int), 10);
+    ga_init2(&zero_width_next_ga, sizeof(int), 10);
 
     // use syntax iskeyword option
     save_chartab(buf_chartab);
diff --git a/src/tag.c b/src/tag.c
index bf816e1..346e63c 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -1752,7 +1752,7 @@
 #endif
     for (mtt = 0; mtt < MT_COUNT; ++mtt)
     {
-	ga_init2(&ga_match[mtt], (int)sizeof(char_u *), 100);
+	ga_init2(&ga_match[mtt], sizeof(char_u *), 100);
 	hash_init(&ht_match[mtt]);
     }
 
@@ -2952,7 +2952,7 @@
 	if (first)
 	{
 	    ga_clear_strings(&tag_fnames);
-	    ga_init2(&tag_fnames, (int)sizeof(char_u *), 10);
+	    ga_init2(&tag_fnames, sizeof(char_u *), 10);
 	    do_in_runtimepath((char_u *)
 #ifdef FEAT_MULTI_LANG
 # ifdef VMS
diff --git a/src/terminal.c b/src/terminal.c
index ab66ace..281c673 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -6674,8 +6674,8 @@
     HANDLE	    i_ours = NULL;
     HANDLE	    o_ours = NULL;
 
-    ga_init2(&ga_cmd, (int)sizeof(char*), 20);
-    ga_init2(&ga_env, (int)sizeof(char*), 20);
+    ga_init2(&ga_cmd, sizeof(char*), 20);
+    ga_init2(&ga_env, sizeof(char*), 20);
 
     if (argvar->v_type == VAR_STRING)
     {
@@ -7022,8 +7022,8 @@
     garray_T	    ga_cmd, ga_env;
     char_u	    *cmd = NULL;
 
-    ga_init2(&ga_cmd, (int)sizeof(char*), 20);
-    ga_init2(&ga_env, (int)sizeof(char*), 20);
+    ga_init2(&ga_cmd, sizeof(char*), 20);
+    ga_init2(&ga_env, sizeof(char*), 20);
 
     if (argvar->v_type == VAR_STRING)
     {
diff --git a/src/undo.c b/src/undo.c
index ec972f0..4d186d4 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -3081,7 +3081,7 @@
      */
     mark = ++lastmark;
     nomark = ++lastmark;
-    ga_init2(&ga, (int)sizeof(char *), 20);
+    ga_init2(&ga, sizeof(char *), 20);
 
     uhp = curbuf->b_u_oldhead;
     while (uhp != NULL)
diff --git a/src/usercmd.c b/src/usercmd.c
index 40790a1..2830a50 100644
--- a/src/usercmd.c
+++ b/src/usercmd.c
@@ -917,7 +917,7 @@
     {
 	gap = &curbuf->b_ucmds;
 	if (gap->ga_itemsize == 0)
-	    ga_init2(gap, (int)sizeof(ucmd_T), 4);
+	    ga_init2(gap, sizeof(ucmd_T), 4);
     }
     else
 	gap = &ucmds;
diff --git a/src/userfunc.c b/src/userfunc.c
index 020d1bc..b772913 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -222,11 +222,11 @@
     char_u	*whitep = *argp;
 
     if (newargs != NULL)
-	ga_init2(newargs, (int)sizeof(char_u *), 3);
+	ga_init2(newargs, sizeof(char_u *), 3);
     if (argtypes != NULL)
-	ga_init2(argtypes, (int)sizeof(char_u *), 3);
+	ga_init2(argtypes, sizeof(char_u *), 3);
     if (!skip && default_args != NULL)
-	ga_init2(default_args, (int)sizeof(char_u *), 3);
+	ga_init2(default_args, sizeof(char_u *), 3);
 
     if (varargs != NULL)
 	*varargs = FALSE;
@@ -1149,7 +1149,7 @@
 	eap.cookie = evalarg->eval_cookie;
     }
 
-    ga_init2(&newlines, (int)sizeof(char_u *), 10);
+    ga_init2(&newlines, sizeof(char_u *), 10);
     if (get_function_body(&eap, &newlines, NULL,
 					     &evalarg->eval_tofree_ga) == FAIL)
 	goto erret;
@@ -1436,7 +1436,7 @@
 	if (pt == NULL)
 	    goto errret;
 
-	ga_init2(&newlines, (int)sizeof(char_u *), 1);
+	ga_init2(&newlines, sizeof(char_u *), 1);
 	if (ga_grow(&newlines, 1) == FAIL)
 	    goto errret;
 
@@ -1760,7 +1760,7 @@
 	    // Prepare for calling test_garbagecollect_now(), need to know
 	    // what variables are used on the call stack.
 	    if (funcargs.ga_itemsize == 0)
-		ga_init2(&funcargs, (int)sizeof(typval_T *), 50);
+		ga_init2(&funcargs, sizeof(typval_T *), 50);
 	    for (i = 0; i < argcount; ++i)
 		if (ga_grow(&funcargs, 1) == OK)
 		    ((typval_T **)funcargs.ga_data)[funcargs.ga_len++] =
@@ -4173,7 +4173,7 @@
 	goto ret_free;
     }
 
-    ga_init2(&newlines, (int)sizeof(char_u *), 10);
+    ga_init2(&newlines, sizeof(char_u *), 10);
 
     if (!eap->skip && name_arg == NULL)
     {
diff --git a/src/version.c b/src/version.c
index 579718e..cdfadeb 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4043,
+/**/
     4042,
 /**/
     4041,
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 5fab27d..311baca 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -174,7 +174,7 @@
 dict_stack_save(typval_T *tv)
 {
     if (dict_stack.ga_growsize == 0)
-	ga_init2(&dict_stack, (int)sizeof(typval_T), 10);
+	ga_init2(&dict_stack, sizeof(typval_T), 10);
     if (ga_grow(&dict_stack, 1) == FAIL)
 	return FAIL;
     ((typval_T *)dict_stack.ga_data)[dict_stack.ga_len] = *tv;
diff --git a/src/viminfo.c b/src/viminfo.c
index ac0d385..3620b58 100644
--- a/src/viminfo.c
+++ b/src/viminfo.c
@@ -2912,7 +2912,7 @@
 	return;
     vir.vir_fd = fp_in;
     vir.vir_conv.vc_type = CONV_NONE;
-    ga_init2(&vir.vir_barlines, (int)sizeof(char_u *), 100);
+    ga_init2(&vir.vir_barlines, sizeof(char_u *), 100);
     vir.vir_version = -1;
 
     if (fp_in != NULL)
diff --git a/src/window.c b/src/window.c
index 4a17c62..6d5d0a4 100644
--- a/src/window.c
+++ b/src/window.c
@@ -5413,7 +5413,7 @@
 {
     win_T	*wp;
 
-    ga_init2(gap, (int)sizeof(int), 1);
+    ga_init2(gap, sizeof(int), 1);
     if (ga_grow(gap, win_count() * 2 + 1) == OK)
     {
 	// first entry is value of 'lines'
