patch 7.4.1564
Problem:    An empty list in function() causes an error.
Solution:   Handle an empty list like there is no list of arguments.
diff --git a/src/eval.c b/src/eval.c
index 3040e93..eadb802 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -11786,6 +11786,10 @@
 	EMSG2(_("E700: Unknown function: %s"), s);
     else
     {
+	int	dict_idx = 0;
+	int	arg_idx = 0;
+	list_T	*list = NULL;
+
 	if (STRNCMP(s, "s:", 2) == 0 || STRNCMP(s, "<SID>", 5) == 0)
 	{
 	    char	sid_buf[25];
@@ -11808,10 +11812,6 @@
 
 	if (argvars[1].v_type != VAR_UNKNOWN)
 	{
-	    partial_T	*pt;
-	    int		dict_idx = 0;
-	    int		arg_idx = 0;
-
 	    if (argvars[2].v_type != VAR_UNKNOWN)
 	    {
 		/* function(name, [args], dict) */
@@ -11824,27 +11824,38 @@
 	    else
 		/* function(name, [args]) */
 		arg_idx = 1;
-	    if (dict_idx > 0 && (argvars[dict_idx].v_type != VAR_DICT
-				     || argvars[dict_idx].vval.v_dict == NULL))
+	    if (dict_idx > 0)
 	    {
-		EMSG(_("E922: expected a dict"));
-		vim_free(name);
-		return;
+		if (argvars[dict_idx].v_type != VAR_DICT)
+		{
+		    EMSG(_("E922: expected a dict"));
+		    vim_free(name);
+		    return;
+		}
+		if (argvars[dict_idx].vval.v_dict == NULL)
+		    dict_idx = 0;
 	    }
-	    if (arg_idx > 0 && (argvars[arg_idx].v_type != VAR_LIST
-				     || argvars[arg_idx].vval.v_list == NULL))
+	    if (arg_idx > 0)
 	    {
-		EMSG(_("E923: Second argument of function() must be a list or a dict"));
-		vim_free(name);
-		return;
+		if (argvars[arg_idx].v_type != VAR_LIST)
+		{
+		    EMSG(_("E923: Second argument of function() must be a list or a dict"));
+		    vim_free(name);
+		    return;
+		}
+		list = argvars[arg_idx].vval.v_list;
+		if (list == NULL || list->lv_len == 0)
+		    arg_idx = 0;
 	    }
+	}
+	if (dict_idx > 0 || arg_idx > 0)
+	{
+	    partial_T	*pt = (partial_T *)alloc_clear(sizeof(partial_T));
 
-	    pt = (partial_T *)alloc_clear(sizeof(partial_T));
 	    if (pt != NULL)
 	    {
 		if (arg_idx > 0)
 		{
-		    list_T	*list = argvars[arg_idx].vval.v_list;
 		    listitem_T	*li;
 		    int		i = 0;
 
diff --git a/src/testdir/test_partial.vim b/src/testdir/test_partial.vim
index 998b232..b1a52db 100644
--- a/src/testdir/test_partial.vim
+++ b/src/testdir/test_partial.vim
@@ -19,6 +19,9 @@
   call assert_equal("foo/bar/xxx", Cb("xxx"))
   call assert_equal("foo/bar/yyy", call(Cb, ["yyy"]))
 
+  let Cb = function('MyFunc', [])
+  call assert_equal("a/b/c", Cb("a", "b", "c"))
+
   let Sort = function('MySort', [1])
   call assert_equal([1, 2, 3], sort([3, 1, 2], Sort))
   let Sort = function('MySort', [0])
@@ -34,10 +37,16 @@
   let Cb = function('MyDictFunc', ["foo", "bar"], dict)
   call assert_equal("hello/foo/bar", Cb())
   call assert_fails('Cb("xxx")', 'E492:')
+
   let Cb = function('MyDictFunc', ["foo"], dict)
   call assert_equal("hello/foo/xxx", Cb("xxx"))
   call assert_fails('Cb()', 'E492:')
+
+  let Cb = function('MyDictFunc', [], dict)
+  call assert_equal("hello/ttt/xxx", Cb("ttt", "xxx"))
+  call assert_fails('Cb("yyy")', 'E492:')
+
   let Cb = function('MyDictFunc', dict)
   call assert_equal("hello/xxx/yyy", Cb("xxx", "yyy"))
-  call assert_fails('Cb()', 'E492:')
+  call assert_fails('Cb("fff")', 'E492:')
 endfunc
diff --git a/src/version.c b/src/version.c
index 50d20f1..3cab689 100644
--- a/src/version.c
+++ b/src/version.c
@@ -744,6 +744,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1564,
+/**/
     1563,
 /**/
     1562,