So apparently try-/all-/test-completion(s) functions test if COLLECTION is a function imprecisely. I propose we fix these functions. Objections? === modified file 'src/minibuf.c' --- src/minibuf.c 2013-11-06 04:11:04 +0000 +++ src/minibuf.c 2013-11-14 05:23:53 +0000 @@ -1199,9 +1199,7 @@ type = (HASH_TABLE_P (collection) ? hash_table : VECTORP (collection) ? obarray_table : ((NILP (collection) - || (CONSP (collection) - && (!SYMBOLP (XCAR (collection)) - || NILP (XCAR (collection))))) + || (CONSP (collection) && !FUNCTIONP (collection))) ? list_table : function_table)); ptrdiff_t idx = 0, obsize = 0; int matchcount = 0; @@ -1460,9 +1458,7 @@ Lisp_Object allmatches; int type = HASH_TABLE_P (collection) ? 3 : VECTORP (collection) ? 2 - : NILP (collection) || (CONSP (collection) - && (!SYMBOLP (XCAR (collection)) - || NILP (XCAR (collection)))); + : NILP (collection) || (CONSP (collection) && !FUNCTIONP (collection)); ptrdiff_t idx = 0, obsize = 0; ptrdiff_t bindcount = -1; Lisp_Object bucket, tem, zero; @@ -1691,9 +1687,7 @@ CHECK_STRING (string); - if ((CONSP (collection) - && (!SYMBOLP (XCAR (collection)) || NILP (XCAR (collection)))) - || NILP (collection)) + if ((CONSP (collection) && !FUNCTIONP (collection)) || NILP (collection)) { tem = Fassoc_string (string, collection, completion_ignore_case ? Qt : Qnil); if (NILP (tem))