patch 8.2.3540: the mark '] is wrong after put with a count

Problem:    The mark '] is wrong after put with a count. (Naohiro Ono)
Solution:   Use the right line number. (closes #8956)
diff --git a/src/register.c b/src/register.c
index 9f179ea..522500c 100644
--- a/src/register.c
+++ b/src/register.c
@@ -2183,7 +2183,7 @@
 					   curbuf->b_op_start.lnum, nr_lines);
 
 	    // put '] mark at last inserted character
-	    curbuf->b_op_end.lnum = lnum;
+	    curbuf->b_op_end.lnum = new_lnum;
 	    // correct length for change in indent
 	    col = (colnr_T)STRLEN(y_array[y_size - 1]) - lendiff;
 	    if (col > 1)
diff --git a/src/testdir/test_put.vim b/src/testdir/test_put.vim
index 4e32946..a6bed75 100644
--- a/src/testdir/test_put.vim
+++ b/src/testdir/test_put.vim
@@ -136,6 +136,18 @@
   bwipe!
 endfunc
 
+func Test_p_with_count_leaves_mark_at_end()
+  new
+  call setline(1, '<---->')
+  call setreg('@', "start\nend", 'c')
+  normal 1G3|3p
+  call assert_equal([0, 1, 4, 0], getpos("."))
+  call assert_equal(['<--start', 'endstart', 'endstart', 'end-->'], getline(1, '$'))
+  call assert_equal([0, 4, 3, 0], getpos("']"))
+
+  bwipe!
+endfunc
+
 func Test_very_large_count()
   " FIXME: should actually check if sizeof(int) == sizeof(long)
   CheckNotMSWindows
diff --git a/src/version.c b/src/version.c
index 28a70fd..c430ff1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -758,6 +758,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3540,
+/**/
     3539,
 /**/
     3538,