]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix defsubst effectiveness (bug#44209)
authorAndrea Corallo <akrl@sdf.org>
Sun, 25 Oct 2020 21:19:25 +0000 (21:19 +0000)
committerAndrea Corallo <akrl@sdf.org>
Sun, 25 Oct 2020 22:56:50 +0000 (22:56 +0000)
* lisp/emacs-lisp/byte-run.el (defsubst): Fix macro definition.
* test/src/comp-tests.el (comp-test-defsubst): New testcase.
* test/src/comp-test-funcs.el (comp-test-defsubst-f): New
function.

lisp/emacs-lisp/byte-run.el
test/src/comp-test-funcs.el
test/src/comp-tests.el

index 042a26a2e31609215a8285b87683b0fd77c4153d..1bc7839188632d567b2546575b0f75c6dfe12b95 100644 (file)
@@ -363,13 +363,13 @@ You don't need this.  (See bytecomp.el commentary for more details.)
   (or (memq (get name 'byte-optimizer)
            '(nil byte-compile-inline-expand))
       (error "`%s' is a primitive" name))
-  ;; Never native-compile defsubsts as we need the byte
-  ;; definition in `byte-compile-unfold-bcf' to perform the
-  ;; inlining (Bug#42664).
-  (byte-run--set-speed name nil -1)
   `(prog1
        (defun ,name ,arglist ,@body)
      (eval-and-compile
+       ;; Never native-compile defsubsts as we need the byte
+       ;; definition in `byte-compile-unfold-bcf' to perform the
+       ;; inlining (Bug#42664, Bug#43280, Bug#44209).
+       ,(byte-run--set-speed name nil -1)
        (put ',name 'byte-optimizer 'byte-compile-inline-expand))))
 
 (defvar advertised-signature-table (make-hash-table :test 'eq :weakness 'key))
index 9285ed62c2aa250196cca34fdc7ee8c3f1cb1bd5..35df46a9b8400d9a423025f3acc951b08484d0d0 100644 (file)
   (declare (speed 2))
   (- x y))
 
+(defsubst comp-test-defsubst-f ()
+  t)
+
 \f
 ;;;;;;;;;;;;;;;;;;;;
 ;; Tromey's tests ;;
index b9a0a8771e5fb0b1d62eca6506f42b884ae36a5f..ae96e5d38681159465199a5a5ddb1f8a43cdd157 100644 (file)
@@ -426,6 +426,10 @@ https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-03/msg00914.html."
     (should (subr-native-elisp-p f))
     (should (= (funcall f 2) 3))))
 
+(comp-deftest comp-test-defsubst ()
+  ;; Bug#42664, Bug#43280, Bug#44209.
+  (should-not (subr-native-elisp-p (symbol-function #'comp-test-defsubst-f))))
+
 \f
 ;;;;;;;;;;;;;;;;;;;;;
 ;; Tromey's tests. ;;