[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
emacs-28 69e82968d7: Fix integer arithmetic miss-compilation (bug#53451)
From: |
Andrea Corallo |
Subject: |
emacs-28 69e82968d7: Fix integer arithmetic miss-compilation (bug#53451) |
Date: |
Wed, 9 Feb 2022 12:00:16 -0500 (EST) |
branch: emacs-28
commit 69e82968d7c2b64710f6f6b79597ac98c82449e7
Author: Andrea Corallo <akrl@sdf.org>
Commit: Andrea Corallo <akrl@sdf.org>
Fix integer arithmetic miss-compilation (bug#53451)
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-set-range-for-arithm):
When one of the two sources is negated revert to set dst as
number.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Add test to
verify this is effective.
---
lisp/emacs-lisp/comp-cstr.el | 26 ++++++++++++++------------
test/src/comp-tests.el | 9 ++++++++-
2 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/lisp/emacs-lisp/comp-cstr.el b/lisp/emacs-lisp/comp-cstr.el
index 97f8f4d5c4..65710b58c1 100644
--- a/lisp/emacs-lisp/comp-cstr.el
+++ b/lisp/emacs-lisp/comp-cstr.el
@@ -449,18 +449,20 @@ Return them as multiple value."
(declare (debug (range-body))
(indent defun))
`(with-comp-cstr-accessors
- (when-let ((r1 (range ,src1))
- (r2 (range ,src2)))
- (let* ((l1 (comp-cstr-smallest-in-range r1))
- (l2 (comp-cstr-smallest-in-range r2))
- (h1 (comp-cstr-greatest-in-range r1))
- (h2 (comp-cstr-greatest-in-range r2)))
- (setf (typeset ,dst) (when (cl-some (lambda (x)
- (comp-subtype-p 'float x))
- (append (typeset src1)
- (typeset src2)))
- '(float))
- (range ,dst) ,@range-body)))))
+ (if (or (neg src1) (neg src2))
+ (setf (typeset ,dst) '(number))
+ (when-let ((r1 (range ,src1))
+ (r2 (range ,src2)))
+ (let* ((l1 (comp-cstr-smallest-in-range r1))
+ (l2 (comp-cstr-smallest-in-range r2))
+ (h1 (comp-cstr-greatest-in-range r1))
+ (h2 (comp-cstr-greatest-in-range r2)))
+ (setf (typeset ,dst) (when (cl-some (lambda (x)
+ (comp-subtype-p 'float x))
+ (append (typeset src1)
+ (typeset src2)))
+ '(float))
+ (range ,dst) ,@range-body))))))
(defun comp-cstr-add-2 (dst src1 src2)
"Sum SRC1 and SRC2 into DST."
diff --git a/test/src/comp-tests.el b/test/src/comp-tests.el
index eb84262dc8..96f2b42c0d 100644
--- a/test/src/comp-tests.el
+++ b/test/src/comp-tests.el
@@ -1353,7 +1353,14 @@ Return a list of results."
(when (eql x 1.0)
(error ""))
x)
- t)))
+ t)
+
+ ;; 74
+ ((defun comp-tests-ret-type-spec-f (x)
+ (if (eq x 0)
+ (error "")
+ (1+ x)))
+ number)))
(defun comp-tests-define-type-spec-test (number x)
`(comp-deftest ,(intern (format "ret-type-spec-%d" number)) ()
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- emacs-28 69e82968d7: Fix integer arithmetic miss-compilation (bug#53451),
Andrea Corallo <=