diff options
author | Mattias EngdegÄrd <mattiase@acm.org> | 2020-08-03 15:29:41 +0200 |
---|---|---|
committer | Mattias EngdegÄrd <mattiase@acm.org> | 2020-08-07 09:41:15 +0200 |
commit | 204273c3b9f0a77459661790aa929f86067a9ab1 (patch) | |
tree | 64afe85216ef0de38d2931702b1dc4ff6b3c430d /lisp/emacs-lisp | |
parent | b83f274869e60342d978ad7e12c5167f0dc8f2a6 (diff) | |
download | emacs-204273c3b9f0a77459661790aa929f86067a9ab1.tar.gz emacs-204273c3b9f0a77459661790aa929f86067a9ab1.tar.bz2 emacs-204273c3b9f0a77459661790aa929f86067a9ab1.zip |
Fix byte-compilation of (+ -0.0) (bug#42597)
* lisp/emacs-lisp/bytecomp.el (byte-compile-associative):
Translate numerical identity expressions, such as (+ x) and (* x),
into (* x 1) since the previous translation (+ x 0) gets it wrong
for x = -0.0.
* test/lisp/emacs-lisp/bytecomp-tests.el
(byte-opt-testsuite-arith-data): Add test cases.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/bytecomp.el | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el index 22e648e44ba..8f76a3abb99 100644 --- a/lisp/emacs-lisp/bytecomp.el +++ b/lisp/emacs-lisp/bytecomp.el @@ -3733,7 +3733,7 @@ discarding." ;; Compile a function that accepts one or more args and is right-associative. ;; We do it by left-associativity so that the operations ;; are done in the same order as in interpreted code. -;; We treat the one-arg case, as in (+ x), like (+ x 0). +;; We treat the one-arg case, as in (+ x), like (* x 1). ;; in order to convert markers to numbers, and trigger expected errors. (defun byte-compile-associative (form) (if (cdr form) @@ -3748,8 +3748,8 @@ discarding." (setq args (copy-sequence (cdr form))) (byte-compile-form (car args)) (setq args (cdr args)) - (or args (setq args '(0) - opcode (get '+ 'byte-opcode))) + (or args (setq args '(1) + opcode (get '* 'byte-opcode))) (dolist (arg args) (byte-compile-form arg) (byte-compile-out opcode 0)))) |