patch 9.0.1391: "clear" macros are not always used

Problem:    "clear" macros are not always used.
Solution:   Use ALLOC_ONE, VIM_CLEAR, CLEAR_POINTER and CLEAR_FIELD in more
            places. (Yegappan Lakshmanan, closes #12104)
diff --git a/src/buffer.c b/src/buffer.c
index ff35729..f6c1610 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -2375,8 +2375,7 @@
     clear_string_option(&buf->b_p_isk);
 #ifdef FEAT_VARTABS
     clear_string_option(&buf->b_p_vsts);
-    vim_free(buf->b_p_vsts_nopaste);
-    buf->b_p_vsts_nopaste = NULL;
+    VIM_CLEAR(buf->b_p_vsts_nopaste);
     VIM_CLEAR(buf->b_p_vsts_array);
     clear_string_option(&buf->b_p_vts);
     VIM_CLEAR(buf->b_p_vts_array);
diff --git a/src/channel.c b/src/channel.c
index 33605d4..97eb5db 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -109,7 +109,7 @@
 	    size = (DWORD)todo;
 	// If the pipe overflows while the job does not read the data,
 	// WriteFile() will block forever. This abandons the write.
-	memset(&ov, 0, sizeof(ov));
+	CLEAR_FIELD(ov);
 	nwrite = 0;
 	if (!WriteFile(h, buf + done, size, &nwrite, &ov))
 	{
diff --git a/src/debugger.c b/src/debugger.c
index b158ecd..a04a078 100644
--- a/src/debugger.c
+++ b/src/debugger.c
@@ -97,14 +97,12 @@
     if (debug_oldval != NULL)
     {
 	smsg(_("Oldval = \"%s\""), debug_oldval);
-	vim_free(debug_oldval);
-	debug_oldval = NULL;
+	VIM_CLEAR(debug_oldval);
     }
     if (debug_newval != NULL)
     {
 	smsg(_("Newval = \"%s\""), debug_newval);
-	vim_free(debug_newval);
-	debug_newval = NULL;
+	VIM_CLEAR(debug_newval);
     }
     sname = estack_sfile(ESTACK_NONE);
     if (sname != NULL)
diff --git a/src/diff.c b/src/diff.c
index 6c13d2a..a46f0bf 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -726,10 +726,7 @@
 clear_diffin(diffin_T *din)
 {
     if (din->din_fname == NULL)
-    {
-	vim_free(din->din_mmfile.ptr);
-	din->din_mmfile.ptr = NULL;
-    }
+	VIM_CLEAR(din->din_mmfile.ptr);
     else
 	mch_remove(din->din_fname);
 }
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 135cb58..0f266dc 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -4354,7 +4354,7 @@
     rettv->v_type = VAR_STRING;
     cmdstr = vim_strsave(tv_get_string(&argvars[0]));
 
-    memset(&eap, 0, sizeof(eap));
+    CLEAR_FIELD(eap);
     eap.cmd = cmdstr;
     eap.arg = cmdstr;
     eap.argt |= EX_NOSPC;
diff --git a/src/fileio.c b/src/fileio.c
index 5a2e388..1966420 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -4382,7 +4382,7 @@
     // file, not reset the syntax highlighting, clear marks, diff status, etc.
     // Force the fileformat and encoding to be the same.
     if (reload_options)
-	memset(&ea, 0, sizeof(ea));
+	CLEAR_FIELD(ea);
     else
 	prepped = prep_exarg(&ea, buf);
 
diff --git a/src/gui_photon.c b/src/gui_photon.c
index a17b4f5..0eb1282 100644
--- a/src/gui_photon.c
+++ b/src/gui_photon.c
@@ -1400,7 +1400,7 @@
     char_u  *open_text = NULL;
 
     flags = 0;
-    memset(&file, 0, sizeof(file));
+    CLEAR_FIELD(file);
 
     default_path = alloc(MAXPATHL + 1 + NAME_MAX + 1);
     if (default_path != NULL)
@@ -1578,8 +1578,8 @@
 	    PtModalCtrl_t modal_ctrl;
 	    PtDialogInfo_t di;
 
-	    memset(&di, 0, sizeof(di));
-	    memset(&modal_ctrl, 0, sizeof(modal_ctrl));
+	    CLEAR_FIELD(di);
+	    CLEAR_FIELD(modal_ctrl);
 
 	    n = 0;
 	    PtSetArg(&args[n++], Pt_ARG_GROUP_ROWS_COLS, 0, 0);
@@ -1707,7 +1707,7 @@
 {
     PhWindowEvent_t event;
 
-    memset(&event, 0, sizeof (event));
+    CLEAR_FIELD(event);
     event.event_f = Ph_WM_HIDE;
     event.event_state = Ph_WM_EVSTATE_HIDE;
     event.rid = PtWidgetRid(gui.vimWindow);
@@ -1723,7 +1723,7 @@
 {
     PhWindowEvent_t event;
 
-    memset(&event, 0, sizeof (event));
+    CLEAR_FIELD(event);
     event.event_f = Ph_WM_TOFRONT;
     event.event_state = Ph_WM_EVSTATE_FFRONT;
     event.rid = PtWidgetRid(gui.vimWindow);
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 206645a..7a12032 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -8387,7 +8387,7 @@
     TOOLINFOW	*pti;
     RECT	rect;
 
-    pti = alloc(sizeof(TOOLINFOW));
+    pti = ALLOC_ONE(TOOLINFOW);
     if (pti == NULL)
 	return;
 
@@ -8655,7 +8655,7 @@
 
 // TODO: at the moment, this is just a copy of test_gui_mouse_event.
 // But, we could instead generate actual Win32 mouse event messages,
-// ie. to make it consistent wih test_gui_w32_sendevent_keyboard.
+// ie. to make it consistent with test_gui_w32_sendevent_keyboard.
     static int
 test_gui_w32_sendevent_mouse(dict_T *args)
 {
diff --git a/src/hardcopy.c b/src/hardcopy.c
index f6be017..e91a7dc 100644
--- a/src/hardcopy.c
+++ b/src/hardcopy.c
@@ -2721,14 +2721,10 @@
     struct prt_ps_resource_S *res_cmap;
     int		retval = FALSE;
 
-    res_prolog = (struct prt_ps_resource_S *)
-				      alloc(sizeof(struct prt_ps_resource_S));
-    res_encoding = (struct prt_ps_resource_S *)
-				      alloc(sizeof(struct prt_ps_resource_S));
-    res_cidfont = (struct prt_ps_resource_S *)
-				      alloc(sizeof(struct prt_ps_resource_S));
-    res_cmap = (struct prt_ps_resource_S *)
-				      alloc(sizeof(struct prt_ps_resource_S));
+    res_prolog = ALLOC_ONE(struct prt_ps_resource_S);
+    res_encoding = ALLOC_ONE(struct prt_ps_resource_S);
+    res_cidfont = ALLOC_ONE(struct prt_ps_resource_S);
+    res_cmap = ALLOC_ONE(struct prt_ps_resource_S);
     if (res_prolog == NULL || res_encoding == NULL
 	    || res_cidfont == NULL || res_cmap == NULL)
 	goto theend;
diff --git a/src/indent.c b/src/indent.c
index be4d563..3c38b4e 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -74,8 +74,7 @@
 	if (n <= 0 || n > TABSTOP_MAX)
 	{
 	    semsg(_(e_invalid_argument_str), cp);
-	    vim_free(*array);
-	    *array = NULL;
+	    VIM_CLEAR(*array);
 	    return FAIL;
 	}
 	(*array)[t++] = n;
diff --git a/src/list.c b/src/list.c
index 7118454..ae9e3e9 100644
--- a/src/list.c
+++ b/src/list.c
@@ -1687,7 +1687,7 @@
     list_T  *l = &sl->sl_list;
     int	    i;
 
-    memset(sl, 0, sizeof(staticList10_T));
+    CLEAR_POINTER(sl);
     l->lv_first = &sl->sl_items[0];
     l->lv_u.mat.lv_last = &sl->sl_items[9];
     l->lv_refcount = DO_NOT_FREE_CNT;
diff --git a/src/mbyte.c b/src/mbyte.c
index 5e6aed0..a9603cb 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -5634,8 +5634,7 @@
     if (l->lv_len == 0)
     {
 	// Clearing the table.
-	vim_free(cw_table);
-	cw_table = NULL;
+	VIM_CLEAR(cw_table);
 	cw_table_size = 0;
 	return;
     }
diff --git a/src/option.c b/src/option.c
index f47b51c..870182b 100644
--- a/src/option.c
+++ b/src/option.c
@@ -7147,7 +7147,7 @@
 	    {
 		buf->b_p_isk = save_p_isk;
 #ifdef FEAT_VARTABS
-		if (p_vts && p_vts != empty_option && !buf->b_p_vts_array)
+		if (p_vts && *p_vts != NUL && !buf->b_p_vts_array)
 		    (void)tabstop_set(p_vts, &buf->b_p_vts_array);
 		else
 		    buf->b_p_vts_array = NULL;
@@ -7163,7 +7163,7 @@
 #ifdef FEAT_VARTABS
 		buf->b_p_vts = vim_strsave(p_vts);
 		COPY_OPT_SCTX(buf, BV_VTS);
-		if (p_vts && p_vts != empty_option && !buf->b_p_vts_array)
+		if (p_vts && *p_vts != NUL && !buf->b_p_vts_array)
 		    (void)tabstop_set(p_vts, &buf->b_p_vts_array);
 		else
 		    buf->b_p_vts_array = NULL;
diff --git a/src/optionstr.c b/src/optionstr.c
index 0389ed0..f88325c 100644
--- a/src/optionstr.c
+++ b/src/optionstr.c
@@ -2714,13 +2714,7 @@
     char_u *cp;
 
     if (!((*varp)[0]) || ((*varp)[0] == '0' && !((*varp)[1])))
-    {
-	if (curbuf->b_p_vsts_array)
-	{
-	    vim_free(curbuf->b_p_vsts_array);
-	    curbuf->b_p_vsts_array = 0;
-	}
-    }
+	VIM_CLEAR(curbuf->b_p_vsts_array);
     else
     {
 	for (cp = *varp; *cp; ++cp)
@@ -2755,13 +2749,7 @@
     char_u *cp;
 
     if (!((*varp)[0]) || ((*varp)[0] == '0' && !((*varp)[1])))
-    {
-	if (curbuf->b_p_vts_array)
-	{
-	    vim_free(curbuf->b_p_vts_array);
-	    curbuf->b_p_vts_array = NULL;
-	}
-    }
+	VIM_CLEAR(curbuf->b_p_vts_array);
     else
     {
 	for (cp = *varp; *cp; ++cp)
diff --git a/src/os_qnx.c b/src/os_qnx.c
index 4a7b363..d3ebb20 100644
--- a/src/os_qnx.c
+++ b/src/os_qnx.c
@@ -24,7 +24,7 @@
 #if defined(FEAT_GUI_PHOTON)
     PhChannelParms_t parms;
 
-    memset(&parms, 0, sizeof(parms));
+    CLEAR_FIELD(parms);
     parms.flags = Ph_DYNAMIC_BUFFER;
 
     is_photon_available = (PhAttach(NULL, &parms) != NULL) ? TRUE : FALSE;
@@ -124,7 +124,7 @@
 
 	if (text_clip && vim_clip)
 	{
-	    memset(clip_header, 0, sizeof(clip_header));
+	    CLEAR_FIELD(clip_header);
 
 	    STRNCPY(clip_header[0].type, CLIP_TYPE_VIM, 8);
 	    clip_header[0].length = sizeof(vim_clip);
diff --git a/src/os_win32.c b/src/os_win32.c
index b519bf0..c43a31a 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -3764,8 +3764,7 @@
 	if (STRLEN(p) >= (size_t)len)
 	{
 	    // long path name is too long, fall back to short one
-	    vim_free(p);
-	    p = NULL;
+	    VIM_CLEAR(p);
 	}
     }
     if (p == NULL)
@@ -8073,8 +8072,7 @@
 	    if (pNtQueryEaFile(h, &iosb, ea, eainfo.EaSize, FALSE,
 			NULL, 0, NULL, TRUE) != STATUS_SUCCESS)
 	    {
-		vim_free(ea);
-		ea = NULL;
+		VIM_CLEAR(ea);
 	    }
 	}
     }
diff --git a/src/popupwin.c b/src/popupwin.c
index c34ee9f..a0d33fd 100644
--- a/src/popupwin.c
+++ b/src/popupwin.c
@@ -3568,8 +3568,7 @@
 
     if (wp->w_popup_mask == NULL || width == 0 || height == 0)
     {
-	vim_free(wp->w_popup_mask_cells);
-	wp->w_popup_mask_cells = NULL;
+	VIM_CLEAR(wp->w_popup_mask_cells);
 	return;
     }
     if (wp->w_popup_mask_cells != NULL
diff --git a/src/quickfix.c b/src/quickfix.c
index 63dd541..13292e2 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -6213,7 +6213,7 @@
 {
     char_u	*p;
 
-    vim_memset(args, 0, sizeof(*args));
+    CLEAR_POINTER(args);
 
     args->regmatch.regprog = NULL;
     args->qf_title = vim_strsave(qf_cmdtitle(*eap->cmdlinep));
diff --git a/src/search.c b/src/search.c
index 1e4464b..74ca8fe 100644
--- a/src/search.c
+++ b/src/search.c
@@ -3202,7 +3202,7 @@
     proftime_T  start;
 #endif
 
-    vim_memset(stat, 0, sizeof(searchstat_T));
+    CLEAR_POINTER(stat);
 
     if (dirc == 0 && !recompute && !EMPTY_POS(lastpos))
     {
diff --git a/src/syntax.c b/src/syntax.c
index a4fa249..4e35956 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -6287,7 +6287,7 @@
     if (curwin->w_s == &curwin->w_buffer->b_s)
     {
 	curwin->w_s = ALLOC_ONE(synblock_T);
-	memset(curwin->w_s, 0, sizeof(synblock_T));
+	CLEAR_POINTER(curwin->w_s);
 	hash_init(&curwin->w_s->b_keywtab);
 	hash_init(&curwin->w_s->b_keywtab_ic);
 #ifdef FEAT_SPELL
diff --git a/src/textprop.c b/src/textprop.c
index bead146..c6464fc 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -1718,8 +1718,7 @@
 			if (ii < gap->ga_len)
 			{
 			    char_u **p = ((char_u **)gap->ga_data) + ii;
-			    vim_free(*p);
-			    *p = NULL;
+			    VIM_CLEAR(*p);
 			    did_remove_text = TRUE;
 			}
 		    }
diff --git a/src/userfunc.c b/src/userfunc.c
index 878e07f..3885f67 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -5155,15 +5155,13 @@
 		fudi.fd_di = dictitem_alloc(fudi.fd_newkey);
 		if (fudi.fd_di == NULL)
 		{
-		    vim_free(fp);
-		    fp = NULL;
+		    VIM_CLEAR(fp);
 		    goto erret;
 		}
 		if (dict_add(fudi.fd_dict, fudi.fd_di) == FAIL)
 		{
 		    vim_free(fudi.fd_di);
-		    vim_free(fp);
-		    fp = NULL;
+		    VIM_CLEAR(fp);
 		    goto erret;
 		}
 	    }
@@ -5292,10 +5290,7 @@
 	clear_type_list(&fp->uf_type_list);
     }
     if (free_fp)
-    {
-	vim_free(fp);
-	fp = NULL;
-    }
+	VIM_CLEAR(fp);
 ret_free:
     ga_clear_strings(&argtypes);
     vim_free(fudi.fd_newkey);
diff --git a/src/version.c b/src/version.c
index 326379c..0270abd 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1391,
+/**/
     1390,
 /**/
     1389,