patch 8.1.0695: internal error when using :popup

Problem:    Internal error when using :popup.
Solution:   When a menu only exists in Terminal mode give an error. (Naruhiko
            Nishino, closes #3765)
diff --git a/src/globals.h b/src/globals.h
index 2a7ecd1..3f67d13 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1583,6 +1583,9 @@
 #endif
 EXTERN char_u e_dirnotf[]	INIT(= N_("E919: Directory not found in '%s': \"%s\""));
 EXTERN char_u e_au_recursive[]	INIT(= N_("E952: Autocommand caused recursive behavior"));
+#ifdef FEAT_MENU
+EXTERN char_u e_menuothermode[] INIT(= N_("E328: Menu only exists in another mode"));
+#endif
 
 #ifdef FEAT_GUI_MAC
 EXTERN short disallow_gui	INIT(= FALSE);
diff --git a/src/menu.c b/src/menu.c
index 782235a..9442118 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -61,7 +61,6 @@
 static char *menu_mode_chars[] = {"n", "v", "s", "o", "i", "c", "tl", "t"};
 
 static char_u e_notsubmenu[] = N_("E327: Part of menu-item path is not sub-menu");
-static char_u e_othermode[] = N_("E328: Menu only exists in another mode");
 static char_u e_nomenu[] = N_("E329: No menu \"%s\"");
 
 #ifdef FEAT_TOOLBAR
@@ -956,7 +955,7 @@
 	    else if (*name != NUL)
 	    {
 		if (!silent)
-		    EMSG(_(e_othermode));
+		    EMSG(_(e_menuothermode));
 		return FAIL;
 	    }
 
@@ -1130,7 +1129,7 @@
 		}
 		else if ((menu->modes & modes) == 0x0)
 		{
-		    EMSG(_(e_othermode));
+		    EMSG(_(e_menuothermode));
 		    vim_free(path_name);
 		    return FAIL;
 		}
diff --git a/src/popupmnu.c b/src/popupmnu.c
index 6ef0af9..962a59a 100644
--- a/src/popupmnu.c
+++ b/src/popupmnu.c
@@ -1195,6 +1195,14 @@
 		|| (mp->modes & mp->enabled & mode))
 	    ++pum_size;
 
+    // When there are only Terminal mode menus, using "popup Edit" results in
+    // pum_size being zero.
+    if (pum_size <= 0)
+    {
+	EMSG(e_menuothermode);
+	return;
+    }
+
     array = (pumitem_T *)alloc_clear((unsigned)sizeof(pumitem_T) * pum_size);
     if (array == NULL)
 	return;
diff --git a/src/testdir/test_popup.vim b/src/testdir/test_popup.vim
index 287d59d..663a6a8 100644
--- a/src/testdir/test_popup.vim
+++ b/src/testdir/test_popup.vim
@@ -882,5 +882,18 @@
   delfunc s:act_on_text_changed
 endfunc
 
+func Test_menu_only_exists_in_terminal()
+  if !exists(':tlmenu') || has('gui_running')
+    return
+  endif
+  tlnoremenu  &Edit.&Paste<Tab>"+gP  <C-W>"+
+  aunmenu *
+  try
+    popup Edit
+    call assert_false(1, 'command should have failed')
+  catch
+    call assert_exception('E328:')
+  endtry
+endfunc
 
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 3450325..790c4f7 100644
--- a/src/version.c
+++ b/src/version.c
@@ -800,6 +800,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    695,
+/**/
     694,
 /**/
     693,