Don't choose the flo:+inf.0/flo:-inf.0 implementations at cold load.
authorChris Hanson <org/chris-hanson/cph>
Tue, 9 Jul 2019 02:48:43 +0000 (22:48 -0400)
committerChris Hanson <org/chris-hanson/cph>
Tue, 9 Jul 2019 02:48:43 +0000 (22:48 -0400)
This is wrong because in our public distributions, the cold load is done on
Ubuntu, but the code is supposed to run on any appropriate unix system.

The fix is to make the selection when the band is restored, guaranteeing that
it's running on the target system.

src/runtime/floenv.scm

index 3e8eface62afcc697a245302ec404a79344546cb..3fbb396b35af08015a96bbfb57d3a9f66e8c4765 100644 (file)
@@ -170,6 +170,7 @@ USA.
             (let ((fp-env* ((ucode-primitive float-environment 0))))
               ((ucode-primitive set-float-environment 1) fp-env)
               fp-env*)))))
+  (initialize-flonum-infinities!)
   unspecific)
 
 (define (initialize-package!)
@@ -370,24 +371,23 @@ USA.
 
 (define flo:+inf.0)
 (define flo:-inf.0)
-;;; ZERO can be eliminated after 9.3 is released.  It works around
-;;; overly-aggressive constant folding in SF and LIAR.
-(let ((zero (lambda () (identity-procedure 0.))))
-  (if (flo:have-trap-enable/disable?)
-      (begin
-       (set! flo:+inf.0
-             (named-lambda (flo:+inf.0)
-               (flo:with-exceptions-untrapped (flo:exception:divide-by-zero)
-                 (lambda ()
-                   (flo:/ +1. (zero))))))
-       (set! flo:-inf.0
-             (named-lambda (flo:-inf.0)
-               (flo:with-exceptions-untrapped (flo:exception:divide-by-zero)
-                 (lambda ()
-                   (flo:/ -1. (zero))))))
-       unspecific)
-      ;; This works on macOS.  YMMV.
-      (begin
-       (set! flo:+inf.0 (named-lambda (flo:+inf.0) (flo:/ +1. (zero))))
-       (set! flo:-inf.0 (named-lambda (flo:-inf.0) (flo:/ -1. (zero))))
-       unspecific)))
\ No newline at end of file
+(define (initialize-flonum-infinities!)
+  (let ((zero (lambda () (identity-procedure ))))
+    (if (flo:have-trap-enable/disable?)
+       (begin
+         (set! flo:+inf.0
+               (named-lambda (flo:+inf.0)
+                 (flo:with-exceptions-untrapped (flo:exception:divide-by-zero)
+                   (lambda ()
+                     (flo:/ +1. 0.)))))
+         (set! flo:-inf.0
+               (named-lambda (flo:-inf.0)
+                 (flo:with-exceptions-untrapped (flo:exception:divide-by-zero)
+                   (lambda ()
+                     (flo:/ -1. 0.)))))
+         unspecific)
+       ;; This works on macOS.  YMMV.
+       (begin
+         (set! flo:+inf.0 (named-lambda (flo:+inf.0) (flo:/ +1. 0.)))
+         (set! flo:-inf.0 (named-lambda (flo:-inf.0) (flo:/ -1. 0.)))
+         unspecific))))
\ No newline at end of file