diff --git a/src/digraph.c b/src/digraph.c
index ac51d50..fb45c15 100644
--- a/src/digraph.c
+++ b/src/digraph.c
@@ -1682,7 +1682,7 @@
     }
 
     // Add a new digraph to the table.
-    if (ga_grow(&user_digraphs, 1) != OK)
+    if (ga_grow(&user_digraphs, 1) == FAIL)
 	return;
 
     dp = (digr_T *)user_digraphs.ga_data + user_digraphs.ga_len;
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 7b34e39..08f8847 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -3966,7 +3966,7 @@
 	len = (int)STRLEN(value);	// Append the entire string
     else
 	len = value_len;		// Append only "value_len" characters
-    if (ga_grow(&redir_execute_ga, len) != OK)
+    if (ga_grow(&redir_execute_ga, len) == FAIL)
 	return;
 
     mch_memmove((char *)redir_execute_ga.ga_data
diff --git a/src/fold.c b/src/fold.c
index 589727d..be20991 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -645,7 +645,7 @@
 	    i = (int)(fp - (fold_T *)gap->ga_data);
     }
 
-    if (ga_grow(gap, 1) != OK)
+    if (ga_grow(gap, 1) == FAIL)
 	return;
 
     fp = (fold_T *)gap->ga_data + i;
@@ -2884,7 +2884,7 @@
 {
     fold_T	*fp;
 
-    if (ga_grow(gap, 1) != OK)
+    if (ga_grow(gap, 1) == FAIL)
 	return FAIL;
     fp = (fold_T *)gap->ga_data + i;
     if (gap->ga_len > 0 && i < gap->ga_len)
diff --git a/src/getchar.c b/src/getchar.c
index f4dce02..2d30d4f 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -3890,7 +3890,7 @@
     got_int = FALSE;
     while (c1 != NUL && !aborted)
     {
-	if (ga_grow(&line_ga, 32) != OK)
+	if (ga_grow(&line_ga, 32) == FAIL)
 	{
 	    aborted = TRUE;
 	    break;
diff --git a/src/map.c b/src/map.c
index 244636f..9be67cd 100644
--- a/src/map.c
+++ b/src/map.c
@@ -2983,7 +2983,7 @@
 	    b = i;
     }
 
-    if (ga_grow(&langmap_mapga, 1) != OK)
+    if (ga_grow(&langmap_mapga, 1) == FAIL)
 	return;  // out of memory
 
     // insert new entry at position "a"
diff --git a/src/os_win32.c b/src/os_win32.c
index e80533b..884ef0d 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -5725,7 +5725,7 @@
 		    size_t	lkey = wcslen(wkey);
 		    size_t	lval = wcslen(wval);
 
-		    if (ga_grow(gap, (int)(lkey + lval + 2)) != OK)
+		    if (ga_grow(gap, (int)(lkey + lval + 2)) == FAIL)
 			continue;
 		    for (n = 0; n < lkey; n++)
 			*((WCHAR*)gap->ga_data + gap->ga_len++) = wkey[n];
diff --git a/src/scriptfile.c b/src/scriptfile.c
index 630a116..008c7b3 100644
--- a/src/scriptfile.c
+++ b/src/scriptfile.c
@@ -56,7 +56,7 @@
 
     // If memory allocation fails then we'll pop more than we push, eventually
     // at the top level it will be OK again.
-    if (ga_grow(&exestack, 1) != OK)
+    if (ga_grow(&exestack, 1) == FAIL)
 	return NULL;
 
     entry = ((estack_T *)exestack.ga_data) + exestack.ga_len;
diff --git a/src/spellfile.c b/src/spellfile.c
index 1a7bd1f..710e438 100644
--- a/src/spellfile.c
+++ b/src/spellfile.c
@@ -3428,7 +3428,7 @@
     fromto_T	*ftp;
     char_u	word[MAXWLEN];
 
-    if (ga_grow(gap, 1) != OK)
+    if (ga_grow(gap, 1) == FAIL)
 	return;
 
     ftp = ((fromto_T *)gap->ga_data) + gap->ga_len;
diff --git a/src/syntax.c b/src/syntax.c
index 614f52e..719bc9c 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -1438,7 +1438,7 @@
     validate_current_state();
     keepend_level = -1;
     if (from->sst_stacksize
-	    && ga_grow(&current_state, from->sst_stacksize) != FAIL)
+	    && ga_grow(&current_state, from->sst_stacksize) == OK)
     {
 	if (from->sst_stacksize > SST_FIX_STATES)
 	    bp = SYN_STATE_P(&(from->sst_union.sst_ga));
@@ -4946,7 +4946,7 @@
 	set_nextcmd(eap, rest);
 	if (!ends_excmd2(eap->cmd, rest) || eap->skip)
 	    rest = NULL;
-	else if (ga_grow(&curwin->w_s->b_syn_patterns, 1) != FAIL
+	else if (ga_grow(&curwin->w_s->b_syn_patterns, 1) == OK
 		&& (syn_id = syn_check_group(arg,
 					   (int)(group_name_end - arg))) != 0)
 	{
@@ -5186,7 +5186,7 @@
 	set_nextcmd(eap, rest);
 	if (!ends_excmd(*rest) || eap->skip)
 	    rest = NULL;
-	else if (ga_grow(&(curwin->w_s->b_syn_patterns), pat_count) != FAIL
+	else if (ga_grow(&(curwin->w_s->b_syn_patterns), pat_count) == OK
 		&& (syn_id = syn_check_group(arg,
 					   (int)(group_name_end - arg))) != 0)
 	{
diff --git a/src/tag.c b/src/tag.c
index 66d6100..93768bc 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -2739,7 +2739,7 @@
 	if (HASHITEM_EMPTY(hi))
 	{
 	    if (hash_add_item(&st->ht_match[mtt], hi, mfp, *hash) == FAIL
-		    || ga_grow(&st->ga_match[mtt], 1) != OK)
+		    || ga_grow(&st->ga_match[mtt], 1) == FAIL)
 	    {
 		// Out of memory! Just forget about the rest.
 		st->stop_searching = TRUE;
diff --git a/src/usercmd.c b/src/usercmd.c
index 9dcc20e..44fa578 100644
--- a/src/usercmd.c
+++ b/src/usercmd.c
@@ -1058,7 +1058,7 @@
     // Extend the array unless we're replacing an existing command
     if (cmp != 0)
     {
-	if (ga_grow(gap, 1) != OK)
+	if (ga_grow(gap, 1) == FAIL)
 	    goto fail;
 	if ((p = vim_strnsave(name, name_len)) == NULL)
 	    goto fail;
diff --git a/src/version.c b/src/version.c
index 0c31039..64da4b3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1251,
+/**/
     1250,
 /**/
     1249,
