patch 8.2.3610: crash when ModeChanged triggered too early
Problem: Crash when ModeChanged triggered too early.
Solution: Trigger ModeChanged after setting VIsual.
diff --git a/src/normal.c b/src/normal.c
index 11b61f9..059baee 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -5778,7 +5778,6 @@
VIsual_mode = c;
VIsual_active = TRUE;
VIsual_reselect = TRUE;
- trigger_modechanged();
// Corner case: the 0 position in a tab may change when going into
// virtualedit. Recalculate curwin->w_cursor to avoid bad highlighting.
@@ -5793,6 +5792,7 @@
foldAdjustVisual();
#endif
+ trigger_modechanged();
setmouse();
#ifdef FEAT_CONCEAL
// Check if redraw is needed after changing the state.
diff --git a/src/testdir/test_edit.vim b/src/testdir/test_edit.vim
index 957f248..bea1b76 100644
--- a/src/testdir/test_edit.vim
+++ b/src/testdir/test_edit.vim
@@ -2037,7 +2037,15 @@
func Test_recursive_ModeChanged()
au! ModeChanged * norm 0u
sil! norm
- au!
+ au! ModeChanged
+endfunc
+
+func Test_ModeChanged_starts_visual()
+ " This was triggering ModeChanged before setting VIsual, causing a crash.
+ au! ModeChanged * norm 0u
+ sil! norm
+
+ au! ModeChanged
endfunc
" Test toggling of input method. See :help i_CTRL-^
diff --git a/src/version.c b/src/version.c
index 55928db..d301120 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3610,
+/**/
3609,
/**/
3608,