diff --git a/src/quickfix.c b/src/quickfix.c
index bee56ee7a..7fd15f40c 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -2980,11 +2980,13 @@ qf_jump_edit_buffer(
 	qf_info_T	*qi,
 	qfline_T	*qf_ptr,
 	int		forceit,
-	win_T		*oldwin,
+	win_T		*wp,
 	int		*opened_window)
 {
     qf_list_T	*qfl = &qi->qf_lists[qi->qf_curlist];
     int		retval = OK;
+    int		old_qf_curlist = qi->qf_curlist;
+    int		save_qfid = qfl->qf_id;
 
     if (qf_ptr->qf_type == 1)
     {
@@ -2993,46 +2995,40 @@ qf_jump_edit_buffer(
 	if (!can_abandon(curbuf, forceit))
 	{
 	    no_write_message();
-	    retval = FAIL;
+	    return FAIL;
 	}
-	else
-	    retval = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
-		    ECMD_HIDE + ECMD_SET_HELP,
-		    oldwin == curwin ? curwin : NULL);
+
+	retval = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
+		ECMD_HIDE + ECMD_SET_HELP,
+		wp == curwin ? curwin : NULL);
     }
     else
-    {
-	int old_qf_curlist = qi->qf_curlist;
-	int save_qfid = qfl->qf_id;
-
 	retval = buflist_getfile(qf_ptr->qf_fnum,
 		(linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
 
-	if (IS_LL_STACK(qi))
-	{
-	    // Location list. Check whether the associated window is still
-	    // present and the list is still valid.
-	    if (!win_valid_any_tab(oldwin))
-	    {
-		EMSG(_("E924: Current window was closed"));
-		*opened_window = FALSE;
-		return NOTDONE;
-	    }
-	    else if (!qflist_valid(oldwin, save_qfid))
-	    {
-		EMSG(_(e_loc_list_changed));
-		return NOTDONE;
-	    }
-	}
-	else if (old_qf_curlist != qi->qf_curlist
-		|| !is_qf_entry_present(qfl, qf_ptr))
-	{
-	    if (IS_QF_STACK(qi))
-		EMSG(_("E925: Current quickfix was changed"));
-	    else
-		EMSG(_(e_loc_list_changed));
-	    return NOTDONE;
-	}
+    if (IS_LL_STACK(qi) && !win_valid_any_tab(wp))
+    {
+	// Check whether the window associated with the location list is still
+	// present.
+	EMSG(_("E924: Current window was closed"));
+	*opened_window = FALSE;
+	return NOTDONE;
+    }
+
+    if (IS_QF_STACK(qi) && !qflist_valid(NULL, save_qfid))
+    {
+	EMSG(_("E925: Current quickfix was changed"));
+	return NOTDONE;
+    }
+
+    if (old_qf_curlist != qi->qf_curlist
+	    || !is_qf_entry_present(qfl, qf_ptr))
+    {
+	if (IS_QF_STACK(qi))
+	    EMSG(_("E925: Current quickfix was changed"));
+	else
+	    EMSG(_(e_loc_list_changed));
+	return NOTDONE;
     }
 
     return retval;
diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim
index 390a231c7..01a950f34 100644
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -3255,6 +3255,17 @@ func Test_lvimgrep_crash()
   augroup QF_Test
     au!
   augroup END
+
+  new | only
+  augroup QF_Test
+    au!
+    au BufEnter * call setloclist(0, [], 'r')
+  augroup END
+  call assert_fails('lvimgrep Test_lvimgrep_crash *', 'E926:')
+  augroup QF_Test
+    au!
+  augroup END
+
   enew | only
 endfunc
 
@@ -3337,6 +3348,37 @@ func Test_lhelpgrep_autocmd()
   call assert_equal('help', &filetype)
   call assert_equal(1, getloclist(0, {'nr' : '$'}).nr)
   au! QuickFixCmdPost
+
+  new | only
+  augroup QF_Test
+    au!
+    au BufEnter * call setqflist([], 'f')
+  augroup END
+  call assert_fails('helpgrep quickfix', 'E925:')
+  augroup QF_Test
+    au! BufEnter
+  augroup END
+
+  new | only
+  augroup QF_Test
+    au!
+    au BufEnter * call setqflist([], 'r')
+  augroup END
+  call assert_fails('helpgrep quickfix', 'E925:')
+  augroup QF_Test
+    au! BufEnter
+  augroup END
+
+  new | only
+  augroup QF_Test
+    au!
+    au BufEnter * call setloclist(0, [], 'r')
+  augroup END
+  call assert_fails('lhelpgrep quickfix', 'E926:')
+  augroup QF_Test
+    au! BufEnter
+  augroup END
+
   new | only
 endfunc
 
