diff --git a/src/buffer.c b/src/buffer.c
index b9b44886c..187a8a648 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1853,6 +1853,7 @@ curbuf_reusable(void)
 	&& curbuf->b_ffname == NULL
 	&& curbuf->b_nwindows <= 1
 	&& (curbuf->b_ml.ml_mfp == NULL || BUFEMPTY())
+	&& !bt_quickfix(curbuf)
 	&& !curbufIsChanged());
 }
 
diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim
index bb25e64c8..1372f8cf9 100644
--- a/src/testdir/test_quickfix.vim
+++ b/src/testdir/test_quickfix.vim
@@ -4012,3 +4012,17 @@ func Test_winonly_autocmd()
   new | only
   call delete('Xtest1')
 endfunc
+
+" Test to make sure that an empty quickfix buffer is not reused for loading
+" a normal buffer.
+func Test_empty_qfbuf()
+  enew | only
+  call writefile(["Test"], 'Xfile1')
+  call setqflist([], 'f')
+  copen | only
+  let qfbuf = bufnr('')
+  edit Xfile1
+  call assert_notequal(qfbuf, bufnr(''))
+  enew
+  call delete('Xtest1')
+endfunc
