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.
This commit is contained in:
Mattias Engdegård 2023-07-26 18:39:36 +02:00
parent b4063c399b
commit 27944247d1
2 changed files with 6 additions and 1 deletions

View file

@ -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

View file

@ -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.")