changeset 9315:1b4946fa3777 v7.4.1940

commit https://github.com/vim/vim/commit/23c60f21b07b04351d846e6fbf4f4abd9aa09345 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Jun 15 22:03:48 2016 +0200 patch 7.4.1940 Problem: "gd" hangs in some situations. (Eric Biggers) Solution: Remove the SEARCH_START flag when looping. Add a test.
author Christian Brabandt <cb@256bit.org>
date Wed, 15 Jun 2016 22:15:06 +0200
parents 1df449de5199
children 405c0bba9d1d
files src/normal.c src/testdir/test_goto.vim src/version.c
diffstat 3 files changed, 18 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/normal.c
+++ b/src/normal.c
@@ -4250,7 +4250,7 @@ find_decl(
     int		len,
     int		locally,
     int		thisblock,
-    int		searchflags)	/* flags passed to searchit() */
+    int		flags_arg)	/* flags passed to searchit() */
 {
     char_u	*pat;
     pos_T	old_pos;
@@ -4261,6 +4261,7 @@ find_decl(
     int		save_p_scs;
     int		retval = OK;
     int		incll;
+    int		searchflags = flags_arg;
 
     if ((pat = alloc(len + 7)) == NULL)
 	return FAIL;
@@ -4346,8 +4347,10 @@ find_decl(
 
 	/* For finding a local variable and the match is before the "{" search
 	 * to find a later match.  For K&R style function declarations this
-	 * skips the function header without types. */
+	 * skips the function header without types.  Remove SEARCH_START from
+	 * flags to avoid getting stuck at one position. */
 	found_pos = curwin->w_cursor;
+	searchflags &= ~SEARCH_START;
     }
 
     if (t == FAIL)
--- a/src/testdir/test_goto.vim
+++ b/src/testdir/test_goto.vim
@@ -1,6 +1,6 @@
 " Test commands that jump somewhere.
 
-func Test_geedee()
+func Test_geeDEE()
   new
   call setline(1, ["Filename x;", "", "int Filename", "int func() {", "Filename y;"])
   /y;/
@@ -8,3 +8,13 @@ func Test_geedee()
   call assert_equal(1, line('.'))
   quit!
 endfunc
+
+func Test_gee_dee()
+  new
+  call setline(1, ["int x;", "", "int func(int x)", "{", "  return x;", "}"])
+  /return/
+  normal $hgd
+  call assert_equal(3, line('.'))
+  call assert_equal(14, col('.'))
+  quit!
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1940,
+/**/
     1939,
 /**/
     1938,