From fa6641f1a6bb055a401f2b8934a9f974c03bde22 Mon Sep 17 00:00:00 2001 From: Taylor R Campbell Date: Sat, 1 Dec 2018 22:39:12 +0000 Subject: [PATCH] Make flo:clear-exceptions! register interest in fp env. Not sure why I made it conditional before. Makes sense for flo:raise-exceptions! for functions whose callers might or might not want them, but usually you do flo:clear-exceptions! only if you are actually going to use them afterward. --- src/runtime/floenv.scm | 4 ++-- tests/runtime/test-floenv.scm | 40 +++++++++++++++++------------------ 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/src/runtime/floenv.scm b/src/runtime/floenv.scm index 37f8bab08..6c7bb0feb 100644 --- a/src/runtime/floenv.scm +++ b/src/runtime/floenv.scm @@ -246,8 +246,8 @@ USA. (flo:trappable-exceptions trappable-float-exceptions 0)) (define (flo:clear-exceptions! exceptions) - (if (using-floating-point-environment?) - ((ucode-primitive clear-float-exceptions 1) exceptions))) + (use-floating-point-environment!) + ((ucode-primitive clear-float-exceptions 1) exceptions)) (define (flo:raise-exceptions! exceptions) (if (using-floating-point-environment?) diff --git a/tests/runtime/test-floenv.scm b/tests/runtime/test-floenv.scm index c754e0e37..9fc9cc0f8 100644 --- a/tests/runtime/test-floenv.scm +++ b/tests/runtime/test-floenv.scm @@ -536,25 +536,23 @@ USA. ;; block thread-switching so nobody else can get in -- and then ;; confirm that within flo:preserving-environment, ;; flo:clear-exceptions! actually clears the exceptions. - (expect-failure - (lambda () - (assert-eqv - (without-interruption + (assert-eqv + (without-interruption + (lambda () + ;; Trigger as many floating-point exceptions as we can. If + ;; they trap, ignore it. Don't enable floating-point traps + ;; since we're testing what happens if we haven't done any + ;; operations that touch the floating-point environment. + (ignore-errors + (lambda () + (flo:sqrt -1.) + (flo:/ flo:smallest-positive-normal 2.) + (flo:sqrt 2.) + (flo:exp (flo:* 2. flo:greatest-normal-exponent-base-e)))) + (flo:preserving-environment (lambda () - ;; Trigger as many floating-point exceptions as we can. If - ;; they trap, ignore it. Don't enable floating-point traps - ;; since we're testing what happens if we haven't done any - ;; operations that touch the floating-point environment. - (ignore-errors - (lambda () - (flo:sqrt -1.) - (flo:/ flo:smallest-positive-normal 2.) - (flo:sqrt 2.) - (flo:exp (flo:* 2. flo:greatest-normal-exponent-base-e)))) - (flo:preserving-environment - (lambda () - ;; Clear the exceptions. - (flo:clear-exceptions! (flo:supported-exceptions)) - ;; Test the exceptions. They should actually be cleared. - (flo:test-exceptions (flo:supported-exceptions)))))) - 0))))) + ;; Clear the exceptions. + (flo:clear-exceptions! (flo:supported-exceptions)) + ;; Test the exceptions. They should actually be cleared. + (flo:test-exceptions (flo:supported-exceptions)))))) + 0))) -- 2.25.1