From: Mattias EngdegÄrd Date: Wed, 26 Jul 2023 16:39:36 +0000 (+0200) Subject: Fix broken byte-compilation of unary comparisons X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=27944247d161f0ed65bbb34959c4493f7984987a;p=emacs.git Fix broken byte-compilation of unary comparisons * lisp/emacs-lisp/byte-opt.el (byte-opt--nary-comparison): Fix a typo causing miscompilation of code such as (OP X), where OP is <, >, <=, >= or =. * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--test-cases): Add test case. Reported by Richard Copley. --- diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el index 0be6ae65aab..3005d69ae88 100644 --- a/lisp/emacs-lisp/byte-opt.el +++ b/lisp/emacs-lisp/byte-opt.el @@ -973,7 +973,7 @@ for speeding up processing.") (let ((nargs (length (cdr form)))) (cond ((= nargs 1) - `(progn (cadr form) t)) + `(progn ,(cadr form) t)) ((>= nargs 3) ;; At least 3 arguments: transform to N-1 binary comparisons, ;; since those have their own byte-ops which are particularly diff --git a/test/lisp/emacs-lisp/bytecomp-tests.el b/test/lisp/emacs-lisp/bytecomp-tests.el index b549ae1fe09..593fd117685 100644 --- a/test/lisp/emacs-lisp/bytecomp-tests.el +++ b/test/lisp/emacs-lisp/bytecomp-tests.el @@ -780,6 +780,11 @@ inner loops respectively." ;; (+ 0 -0.0) etc (let ((x (bytecomp-test-identity -0.0))) (list x (+ x) (+ 0 x) (+ x 0) (+ 1 2 -3 x) (+ 0 x 0))) + + ;; Unary comparisons: keep side-effect, return t + (let ((x 0)) + (list (= (setq x 1)) + x)) ) "List of expressions for cross-testing interpreted and compiled code.")