guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 22/30: Fix inference of generic < on NaN values


From: Andy Wingo
Subject: [Guile-commits] 22/30: Fix inference of generic < on NaN values
Date: Fri, 24 Nov 2017 09:24:23 -0500 (EST)

wingo pushed a commit to branch master
in repository guile.

commit e79de9d4b569e708f34f98253b9bbaf2163b0ff0
Author: Andy Wingo <address@hidden>
Date:   Wed Nov 22 10:44:34 2017 +0100

    Fix inference of generic < on NaN values
    
    * module/language/cps/types.scm (<): Don't infer anything if either
      number could be a flonum.
---
 module/language/cps/types.scm | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/module/language/cps/types.scm b/module/language/cps/types.scm
index 852109f..20a648f 100644
--- a/module/language/cps/types.scm
+++ b/module/language/cps/types.scm
@@ -1051,16 +1051,18 @@ minimum, and maximum."
             (restrict! b &bignum -inf.0 (1- (target-most-negative-fixnum)))))
        (else
         (infer-integer-< a b true?))))
-     (else
+     ;; Can't include &flonum because of NaN.  Perhaps we should model
+     ;; NaN with a separate type bit.
+     ((type<=? types &exact-number)
       (let ((min0 (&min a)) (max0 (&max a))
             (min1 (&min b)) (max1 (&max b)))
         (cond
          (true?
-          (restrict! a &real min0 (min max0 max1))
-          (restrict! b &real (max min0 min1) max1))
+          (restrict! a &exact-number min0 (min max0 max1))
+          (restrict! b &exact-number (max min0 min1) max1))
          (else
-          (restrict! a &real (max min0 min1) max0)
-          (restrict! b &real min1 (min max0 max1)))))))))
+          (restrict! a &exact-number (max min0 min1) max0)
+          (restrict! b &exact-number min1 (min max0 max1)))))))))
 
 (define-=-inferrer (u64-= &u64))
 (define-predicate-inferrer (u64-< a b true?)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]