* bug#35767: 26.1; byte compiler lost warning about calling define-key with wrong number of arguments
@ 2019-05-16 21:24 Alex Branham
2019-05-28 0:59 ` Noam Postavsky
0 siblings, 1 reply; 3+ messages in thread
From: Alex Branham @ 2019-05-16 21:24 UTC (permalink / raw)
To: 35767
Save a file with this line somewhere and call it foo.el:
(define-key "l" #'ignore)
Then call:
emacs -Q --eval "(setq byte-compile-error-on-warn t)" -batch -f batch-byte-compile foo.el
it _should_ emit an error since define-key gets called with the wrong
number of arguments. In Emacs 25.3, it does. In Emacs 26.1 and Emacs
built recently from git master, it does not.
Alex
^ permalink raw reply [flat|nested] 3+ messages in thread
* bug#35767: 26.1; byte compiler lost warning about calling define-key with wrong number of arguments
2019-05-16 21:24 bug#35767: 26.1; byte compiler lost warning about calling define-key with wrong number of arguments Alex Branham
@ 2019-05-28 0:59 ` Noam Postavsky
2019-05-30 22:51 ` Noam Postavsky
0 siblings, 1 reply; 3+ messages in thread
From: Noam Postavsky @ 2019-05-28 0:59 UTC (permalink / raw)
To: Alex Branham; +Cc: 35767
[-- Attachment #1: Type: text/plain, Size: 854 bytes --]
tags 35767 + patch
quit
Alex Branham <alex.branham@gmail.com> writes:
> (define-key "l" #'ignore)
>
> Then call:
>
> emacs -Q --eval "(setq byte-compile-error-on-warn t)" -batch -f batch-byte-compile foo.el
>
> it _should_ emit an error since define-key gets called with the wrong
> number of arguments. In Emacs 25.3, it does. In Emacs 26.1 and Emacs
> built recently from git master, it does not.
Specifically, Emacs 26+ doesn't warn about wrong number of arguments to
subrs. The fix seems simple enough to apply to emacs-26.
Minor caveat, some subrs (e.g., length) get warned about twice (with
slightly different wording each time), but this occurs in 25.3 as well,
so I guess it's acceptable:
Warning: ‘length’ called with 3 args, but requires 1
Warning: length called with 3 arguments, but accepts only 1
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: patch --]
[-- Type: text/x-diff, Size: 2414 bytes --]
From 050b2bd3041d3d856dcb5ff6adfa75e8a63d8032 Mon Sep 17 00:00:00 2001
From: Noam Postavsky <npostavs@gmail.com>
Date: Mon, 27 May 2019 20:36:41 -0400
Subject: [PATCH] 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.
---
lisp/emacs-lisp/bytecomp.el | 2 +-
test/lisp/emacs-lisp/bytecomp-tests.el | 14 ++++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 9ea4179b68..72e81a653c 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -1379,7 +1379,7 @@ (defun byte-compile-function-warn (f nargs def)
(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 bc28c5a6a0..c399f65b40 100644
--- a/test/lisp/emacs-lisp/bytecomp-tests.el
+++ b/test/lisp/emacs-lisp/bytecomp-tests.el
@@ -438,6 +438,20 @@ (ert-deftest bytecomp-tests--warnings ()
;; 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))))
--
2.11.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* bug#35767: 26.1; byte compiler lost warning about calling define-key with wrong number of arguments
2019-05-28 0:59 ` Noam Postavsky
@ 2019-05-30 22:51 ` Noam Postavsky
0 siblings, 0 replies; 3+ messages in thread
From: Noam Postavsky @ 2019-05-30 22:51 UTC (permalink / raw)
To: Alex Branham; +Cc: 35767
tags 35767 fixed
close 35767 26.3
quit
> Subject: [PATCH] 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.
Pushed to emacs-26.
134edc1036 2019-05-30T18:46:07-04:00 "Warn about wrong number of args for subrs (Bug#35767)"
https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=134edc10367a8434167656e631865c85b5f10c42
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-05-30 22:51 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-05-16 21:24 bug#35767: 26.1; byte compiler lost warning about calling define-key with wrong number of arguments Alex Branham
2019-05-28 0:59 ` Noam Postavsky
2019-05-30 22:51 ` Noam Postavsky
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.