From: Andrea Corallo Date: Mon, 26 Oct 2020 16:31:13 +0000 (+0000) Subject: Make native compiler tollerant to redefined primitives (bug#44221). X-Git-Tag: emacs-28.0.90~2727^2~353 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=fd9e9308d27138a16e2e93417bd7ad4448fea40a;p=emacs.git Make native compiler tollerant to redefined primitives (bug#44221). * lisp/emacs-lisp/comp.el (comp-emit-set-call-subr): Rework based on the fact that the subr can now be redefined. * test/src/comp-tests.el (primitive-redefine-compile-44221): New testcase. --- diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el index 1808e727bb9..15b8b3ab8da 100644 --- a/lisp/emacs-lisp/comp.el +++ b/lisp/emacs-lisp/comp.el @@ -1153,9 +1153,7 @@ Return value is the fall through block name." SP-DELTA is the stack adjustment." (let ((subr (symbol-function subr-name)) (nargs (1+ (- sp-delta)))) - (unless (subrp subr) - (signal 'native-ice (list "not a subr" subr))) - (let* ((arity (subr-arity subr)) + (let* ((arity (func-arity subr)) (minarg (car arity)) (maxarg (cdr arity))) (when (eq maxarg 'unevalled) diff --git a/test/src/comp-tests.el b/test/src/comp-tests.el index ae96e5d3868..446a61549d9 100644 --- a/test/src/comp-tests.el +++ b/test/src/comp-tests.el @@ -430,6 +430,15 @@ https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-03/msg00914.html." ;; Bug#42664, Bug#43280, Bug#44209. (should-not (subr-native-elisp-p (symbol-function #'comp-test-defsubst-f)))) +(comp-deftest primitive-redefine-compile-44221 () + "Test the compiler still works while primitives are redefined (bug#44221)." + (cl-letf (((symbol-function #'delete-region) + (lambda (_ _)))) + (should (subr-native-elisp-p + (native-compile + '(lambda () + (delete-region (point-min) (point-max)))))))) + ;;;;;;;;;;;;;;;;;;;;; ;; Tromey's tests. ;;