From: Taylor R Campbell Date: Sat, 17 Nov 2018 09:15:26 +0000 (+0000) Subject: Revert "Remove workaround for 9.2 compiler bug." X-Git-Tag: mit-scheme-pucked-10.1.2~16^2~57 X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=7cbf0d42c187ef96fc861a43ceff42f68ca53741;p=mit-scheme.git Revert "Remove workaround for 9.2 compiler bug." This reverts commit 7828111b77fb53e34b365abc775148f49eabe1d2. Can't keep this change until a new release has a compiler without the bug. --- diff --git a/src/runtime/floenv.scm b/src/runtime/floenv.scm index 3c78ef5b5..d4d478ee3 100644 --- a/src/runtime/floenv.scm +++ b/src/runtime/floenv.scm @@ -362,27 +362,30 @@ USA. (define flo:nan.0) (define flo:+inf.0) (define flo:-inf.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. 0.))))) - (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:nan.0 (named-lambda (flo:nan.0) (flo:/ 0. 0.))) - (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 +;;; 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