From: Noam Postavsky Date: Tue, 28 May 2019 00:36:41 +0000 (-0400) Subject: Warn about wrong number of args for subrs (Bug#35767) X-Git-Tag: emacs-26.2.90~32 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=134edc1;p=emacs.git Warn about wrong number of args for subrs (Bug#35767) * lisp/emacs-lisp/bytecomp.el (byte-compile-callargs-warn): Don't assume byte-compile-fdefinition will return non-nil. * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-warn-wrong-args) (bytecomp-warn-wrong-args-subr): New tests. --- diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 9ea4179b68d..72e81a653c7 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -1379,7 +1379,7 @@ when printing the error message." (defun byte-compile-callargs-warn (form) (let* ((def (or (byte-compile-fdefinition (car form) nil) (byte-compile-fdefinition (car form) t))) - (sig (byte-compile--function-signature def)) + (sig (byte-compile--function-signature (or def (car form)))) (ncall (length (cdr form)))) ;; Check many or unevalled from subr-arity. (if (and (cdr-safe sig) diff --git a/test/lisp/emacs-lisp/bytecomp-tests.el b/test/lisp/emacs-lisp/bytecomp-tests.el index bc28c5a6a00..c399f65b402 100644 --- a/test/lisp/emacs-lisp/bytecomp-tests.el +++ b/test/lisp/emacs-lisp/bytecomp-tests.el @@ -438,6 +438,20 @@ Subtests signal errors if something goes wrong." ;; Should not warn that mt--test2 is not known to be defined. (should-not (re-search-forward "my--test2" nil t)))) +(ert-deftest bytecomp-warn-wrong-args () + (with-current-buffer (get-buffer-create "*Compile-Log*") + (let ((inhibit-read-only t)) (erase-buffer)) + (byte-compile '(remq 1 2 3)) + (ert-info ((buffer-string) :prefix "buffer: ") + (should (re-search-forward "remq.*3.*2"))))) + +(ert-deftest bytecomp-warn-wrong-args-subr () + (with-current-buffer (get-buffer-create "*Compile-Log*") + (let ((inhibit-read-only t)) (erase-buffer)) + (byte-compile '(safe-length 1 2 3)) + (ert-info ((buffer-string) :prefix "buffer: ") + (should (re-search-forward "safe-length.*3.*1"))))) + (ert-deftest test-eager-load-macro-expansion () (test-byte-comp-compile-and-load nil '(progn (defmacro abc (arg) 1) (defun def () (abc 2))))