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:
parent
b4063c399b
commit
27944247d1
2 changed files with 6 additions and 1 deletions
|
@ -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
|
||||
|
|
|
@ -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.")
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue