patch 8.2.0649: undo problem whn an InsertLeave autocommand resets undo

Problem:    Undo problem whn an InsertLeave autocommand resets undo. (Kutsan
            Kaplan)
Solution:   Do not create a new undo block when leaving Insert mode.
diff --git a/src/edit.c b/src/edit.c
index 05518ce..7f4f765 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -5994,7 +5994,8 @@
 
     // If u_savesub() was called then we are not prepared to start
     // a new line.  Call u_save() with no contents to fix that.
-    if (tick != CHANGEDTICK(curbuf))
+    // Except when leaving Insert mode.
+    if (event != EVENT_INSERTLEAVE && tick != CHANGEDTICK(curbuf))
 	u_save(curwin->w_cursor.lnum, (linenr_T)(curwin->w_cursor.lnum + 1));
 
     return r;
diff --git a/src/testdir/test_edit.vim b/src/testdir/test_edit.vim
index ce55f6b..a9ba31d 100644
--- a/src/testdir/test_edit.vim
+++ b/src/testdir/test_edit.vim
@@ -1444,7 +1444,7 @@
   call delete('XAltFile')
 endfunc
 
-func Test_leave_insert_autocmd()
+func Test_edit_InsertLeave()
   new
   au InsertLeave * let g:did_au = 1
   let g:did_au = 0
@@ -1474,6 +1474,21 @@
   iunmap x
 endfunc
 
+func Test_edit_InsertLeave_undo()
+  new XtestUndo
+  set undofile
+  au InsertLeave * wall
+  exe "normal ofoo\<Esc>"
+  call assert_equal(2, line('$'))
+  normal u
+  call assert_equal(1, line('$'))
+
+  bwipe!
+  au! InsertLeave
+  call delete('XtestUndo')
+  set undofile&
+endfunc
+
 " Test for inserting characters using CTRL-V followed by a number.
 func Test_edit_special_chars()
   new
diff --git a/src/version.c b/src/version.c
index a9a2e29..fa91a2b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    649,
+/**/
     648,
 /**/
     647,