From 27944247d161f0ed65bbb34959c4493f7984987a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mattias=20Engdeg=C3=A5rd?= Date: Wed, 26 Jul 2023 18:39:36 +0200 Subject: [PATCH] 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. --- lisp/emacs-lisp/byte-opt.el | 2 +- test/lisp/emacs-lisp/bytecomp-tests.el | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) 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.") -- 2.39.5