summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorMattias EngdegÄrd <mattiase@acm.org>2020-08-03 15:29:41 +0200
committerMattias EngdegÄrd <mattiase@acm.org>2020-08-07 09:41:15 +0200
commit204273c3b9f0a77459661790aa929f86067a9ab1 (patch)
tree64afe85216ef0de38d2931702b1dc4ff6b3c430d /lisp/emacs-lisp
parentb83f274869e60342d978ad7e12c5167f0dc8f2a6 (diff)
downloademacs-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.el6
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))))