Don't choose the flo:+inf.0/flo:-inf.0 implementations at cold load.
authorChris Hanson <org/chris-hanson/cph>
Wed, 17 Jul 2019 23:17:24 +0000 (19:17 -0400)
committerChris Hanson <org/chris-hanson/cph>
Wed, 17 Jul 2019 23:17:24 +0000 (19:17 -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.

Manual cherry-pick of 9b94290f82a99dfdb63ae94defcc8a92f2c0514d.

src/runtime/floenv.scm

index d1ce1e30ddcf9933f5cf9a5fe1af681b561d572e..72140c1265ba7d800f635f77fc9219a548e066eb 100644 (file)
@@ -167,7 +167,7 @@ USA.
             (let ((fp-env* ((ucode-primitive float-environment 0))))
               ((ucode-primitive set-float-environment 1) fp-env)
               fp-env*)))))
-  unspecific)
+  (initialize-flonum-infinities!))
 
 (define (initialize-package!)
   (reset-package!)
@@ -368,28 +368,29 @@ USA.
 (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:nan.0
-             (named-lambda (flo:nan.0)
-               (flo:with-exceptions-untrapped (flo:exception:invalid-operation)
-                 (lambda ()
-                   (flo:/ 0. (zero))))))
-       (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:nan.0 (named-lambda (flo:nan.0) (flo:/ 0. (zero))))
-       (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 0.))))
+    (if (flo:have-trap-enable/disable?)
+        (begin
+          (set! flo:nan.0
+                (named-lambda (flo:nan.0)
+                  (flo:with-exceptions-untrapped (flo:exception:invalid-operation)
+                    (lambda ()
+                      (flo:/ 0. (zero))))))
+          (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:nan.0 (named-lambda (flo:nan.0) (flo:/ 0. (zero))))
+          (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